LYinkoy

数据采集与融合技术实践第五次作业

数据采集与融合技术实践第五次作业

姓名:刘心怡 学号:031904134 班级:2019级大数据一班

作业①

1)实验内容及结果

①实验内容

要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架爬取京东商城某类商品信息及图片。
候选网站:http://www.jd.com/
关键词:学生自由选择
输出信息:

mNo mMark mPrice mNote mFile
000001 三星Galaxy 9199.00 三星Galaxy Note20 Ultra 5G... 000001.jpg
000002......

②实验步骤

检查元素得

因此提取li代码为:

time.sleep(1)
print(self.driver.current_url)
lis =self.driver.find_elements_by_xpath("//div[@id='J_goodsList']//li[@class='gl-item']")

检查内部具体元素属性

因此编写爬取代码为:

try:
    src1 = li.find_element_by_xpath(".//div[@class='p-img']//a//img").get_attribute("src")
except:
    src1 = ""
try:
    src2 = li.find_element_by_xpath(".//div[@class='p-img']//a//img").get_attribute("data-lazy-img")
except:
    src2 = ""
try:
    price = li.find_element_by_xpath(".//div[@class='p-price']//i").text
except:
    price = "0"
try:
    note = li.find_element_by_xpath(".//div[@class='p-name p-name-type-2']//em").text
    mark = note.split(" ")[0]
    mark = mark.replace("爱心东东\n", "")
    mark = mark.replace(",", "")
    note = note.replace("爱心东东\n", "")
    note = note.replace(",", "")
except:
    note = ""
    mark = ""

因为涉及到翻页,因此查看页面“下一页”按钮属性为:

因此编写翻页部分为:

try:
    self.driver.find_element_by_xpath("//span[@class='p-num']//a[@class='pn-next disabled']")
except:
    nextPage = self.driver.find_element_by_xpath("//span[@class='p-num']//a[@class='pn-next']")
    time.sleep(10)
    nextPage.click()
    self.processSpider()

编写写入数据库语句为:

sql = "insert into phones (mNo,mMark,mPrice,mNote,mFile) values (%s,%s,%s,%s,%s)"
self.cursor.execute(sql, (mNo, mMark, mPrice, mNote, mFile))
self.con.commit()

原本values后部分写为(?,?,?,?,?),后经询问老师发现这是不规范的写法,遂改为如上格式,此外,我的电脑必须写一条提交一条,否则无法写入数据库。

③代码链接

https://gitee.com/lyinkoy/crawl_project/blob/master/作业5/1.py

④运行结果:

2)心得体会

在作业①中系统学习了使用Selenium 查找HTML元素,xpath爬取信息的方法以及MySQL数据库的连接与写入,我在这一实验中在网上查找了许多资料,了解了许多之前被自己忽略的细节。并且注意到了我的电脑的写入特点,此外,在写实验报告重新运行时,发现:

谷歌它失效了!说是版本有误…于是秉承着“得不到就毁掉”的心态,我卸载重装,检查版本无误后程序运行:

果然,卸载重装能解决90%的问题,受益颇多。

作业②

1)实验内容及结果

①实验内容

要求:熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储。
候选网站:中国mooc网:https://www.icourse163.org
输出信息:MYSQL数据库存储和输出格式
​ 表头应是英文命名例如:课程号ID,课程名称:cCourse……,由同学们自行定义设计表头

Id cCourse cCollege cSchedule cCourseStatus cImgUrl
1 Python网络爬虫与信息提取 北京理工大学 已学3/18课时 2021年5月18日已结束 http://edu-image.nosdn.127.net/C0AB6FA791150F0DFC0946B9A01C8CB2.jpg
2......

②实验步骤

首先,要实现页面登录,就要了解页面中各页面按钮的分布,已我的课程为例

因此,可编写登录步骤代码为:

driver.find_element_by_xpath('//div[@class="unlogin"]//a[@class="f-f0 navLoginBtn"]').click()   #登录或注册
sleep(2)
driver.find_element_by_class_name('ux-login-set-scan-code_ft_back').click()              #其他登录方式
sleep(2)
driver.find_element_by_xpath("//ul[@class='ux-tabs-underline_hd']//li[@class='']").click()
sleep(2)
driver.switch_to.frame(driver.find_element_by_xpath("//div[@class='ux-login-set-container']//iframe"))
driver.find_element_by_xpath('//input[@id="phoneipt"]').send_keys("18870067165")        #输入账号
sleep(2)
driver.find_element_by_xpath('//input[@placeholder="请输入密码"]').send_keys("Lxy671032")   #输入密码
sleep(2)
driver.find_element_by_xpath('//div[@class="f-cb loginbox"]//a[@id="submitBtn"]').click()  #点击登录

而点击我的课程这一步最开始的代码为:

driver.find_element_by_xpath('//div[@id="g-body"]//div[@class="_1Y4Ni"]//div[@class="_3uWA6"]').click()

总是点不进去,报这个错误:

上网查找资料得:

遂修改为如下

sleep(10)
element1 = driver.find_element_by_xpath('//div[@class="_3uWA6"]')#点击我的课程
driver.execute_script("arguments[0].click();", element1)

在编写option时,按照原有的跑了一版,报错如下:

在网上搜索资料得:

因此修改为:

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('-enable-webgl')
option.add_argument('--no-sandbox')
option.add_argument('-disable-dev-shm-usage')
driver = webdriver.Chrome(options=option)

而在编写爬取代码时,检查页面元素得:

编写代码如下:

divs = driver.find_elements_by_xpath('.//div[@class="course-panel-body-wrapper"]//div')
for div in divs:
    try:
        count += 1
        # print(count)
        course = driver.find_element_by_xpath('//div[@class="title"]/div/span[@class="text"]').text
        college = driver.find_element_by_xpath('//div[@class="school"]/a').text
        schedule = driver.find_element_by_xpath('//div[@class="course-progress"]/div//a/span').text
        coursestatus = driver.find_element_by_xpath('//div[@class="personal-info"]/div[@class="course-status"]').text
        picurl = driver.find_element_by_xpath('//div[@class="img"]/img').get_attribute("src")
        cid = str(count)

运行时报错如下:

而询问助教,他说我的代码爬取结构有点问题,于是修改如下:

course = driver.find_elements(By.XPATH,'//*[@id="j-coursewrap"]/div/div[1]/div/div/a/div[2]/div/div/div/span[@class="text"]')
college = driver.find_elements(By.XPATH,'//*[@id="j-coursewrap"]/div/div[1]/div/div/a/div[2]/div/div[@class="school"]/a')
schedule = driver.find_elements(By.XPATH,'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[1]/div[1]/div[1]/a/span')
status = driver.find_elements(By.XPATH,'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[2]')
imgurl = driver.find_elements(By.XPATH,'//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[1]/img')

③代码链接

https://gitee.com/lyinkoy/crawl_project/blob/master/作业5/2.py

④运行结果:

2)心得体会

在作业②中进一步系统学习了使用Selenium 查找HTML元素,xpath爬取信息的方法以及MySQL数据库的连接与写入,我在这一实验中在网上查找了许多资料,了解了许多之前被自己忽略的细节。并且注意到了我的电脑的写入特点,此外,在运行时发现:

查资料得:

后检查driver的运行,修改成功。而在后面,又出现了这样的错误:

driver失效了,查资料得:

重装后解决,受益颇多。

作业③

1)实验内容及结果

①实验内容

要求:理解Flume架构和关键特性,掌握使用Flume完成日志采集任务。完成Flume日志采集实验,包含以下步骤:
任务一:开通MapReduce服务
任务二:Python脚本生成测试数据
任务三:配置Kafka
任务四:安装Flume客户端
任务五:配置Flume采集数据

②运行结果:

开通MapReduce服务

Python脚本生成测试数据

配置Kafka

安装Flume客户端

配置Flume采集数据

2)心得体会

在作业③初步的学习了华为云中Flume的基本使用,我在这一实验中尝试了理解Flume架构和关键特性,并且尝试掌握使用Flume完成日志采集任务,受益颇多。

posted on 2021-11-26 23:51  LYinkoy  阅读(13)  评论(0编辑  收藏  举报

导航