900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 实验2动态渲染网页的内容抓取

实验2动态渲染网页的内容抓取

时间:2019-04-20 21:00:31

相关推荐

实验2动态渲染网页的内容抓取

文章目录

一 实验目的二 实验要求三 实验程序及运行结果3.1实验内容概述3.2代码解说3.2.1翻页:通过回调函数实现翻页。3.2.2显示页数:循环变量即为当前页数。3.2.3爬取动态数据:来源,移动端标题,文章类型,标题,来源_ID,来源图标,个人网站,发表时间,图片链接,标签,来源网址。3.2.4 处理时间戳。3.2.5 处理来源、标题、移动端标题——删除\xa0、\u200b、\u3000等符号。3.2.6 数据存入csv和mongodb。3.2.7 绘制进度条:利用sys绘制(伪)进度条。 3.3 运行结果:3.3.1 控制台 ![](https://img-/68abf0ecfce54b0eb8d7714c56c75cb7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6aOO5LmJ,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)3.3.2 csv文件3.3.3 mongodb数据库 四 实验总结4.1 实验中遇到的部分问题与解决方法:4.1.1 问题:部分网页爬取不到;解决方法:利用try……except抓取。4.1.2 问题:爬取下来的时间为13位时间戳4.1.3 问题:图片链接和标签爬取信息出错4.1.4 问题:部分新闻标题爬下来有\u3000等符号4.1.5 问题:只爬取每页第一条新闻 4.2 实验感悟:

一 实验目的

掌握使用Scrapy爬虫工具编写爬虫程序的基本思路;掌握抓取列表+详情+AJAX的动态组合页面的方法

二 实验要求

抓取目标。可以选择以下网站作为抓取目标,也可以寻找自己感兴趣的抓取目标:

1)“京东商城”中某一类产品,如手机类产品页面入口为:/list.html?cat=9987,653,655,笔记本电脑类产品页面入口为:/list.html?cat=670,671,672。产品信息页地址类似于:/8735304.html。产品信息页中的价格信息,评论信息为动态渲染。

2)搜狐新闻-时政。/c/8/1460,新闻列表为动态渲染。

3)任意具有动态网页特征的网站。任务要求。

1) 分析页面结构,确定待抓取的数据项,参考实验一的要求,同时应该至少包含一项动态渲染的数据项。

评分标准:满分35分;每个静态数据项2分,不超过10分;抓取动态数据项目2项以上给满分;

2) 分析动态渲染的数据项,能够正确提取出AJAX交互的URL和消息内容,能够正确解析AJAX消息内容,能够自动抓取至少100篇网页内容。

评分标准:满分25分;每20条数据5分,根据爬取的数量给分超过100篇,满分;

3) 数据持久化。将数据存入磁盘文件。

评分标准:满分20分;根据无写入,写入文本或Excel,写入数据库确定分数;无写入0分,写入文本或Excel 10分;写入数据库20;

4) 数据处理

评分标准:满分15分;提到数据处理5分;每个数据处理问题5分,解决两个以上数据处理问题的给予15分;

5) 报告整体情况:

评分标准:报告格式整洁程度5分;

加分:实验报告中未要求的但在实验过程中发现新的问题,每个加5分,不超过10分。

三 实验程序及运行结果

3.1实验内容概述

本程序使用scrapy架构,共采集21页(420条)搜狐时政版块新闻的11种信息,实现了数据清洗处理,在控制台输出问题数据,并将修改后的数据分别存入mongodb数据库和csv文件,其间有进度条显示程序运行进度。

3.2代码解说

3.2.1翻页:通过回调函数实现翻页。

# 1460(sceneId): 搜狐新闻时政版块# page(>=1&&<=99): 页面数(超过100页网址失效); size(>=1&&<=1000): 页面容量;# page * size <=1000: 一次最多查询 1000 条新闻,超过 1000 条内容为空;base_urls = "/public-api/feed?scene=CATEGORY&sceneId=1460&size=20&page="page = 1# 翻页def parse(self, response):if self.page < 22: # 爬取前 21 页, 420 (=20*21) 条新闻url = self.base_urls + str(self.page)yield scrapy.Request(url=url, callback=self.parse, dont_filter=True)# 显示当前页数# print("\n正在爬取第", self.page, "页新闻………………………………………………………………………………")self.page += 1pass

3.2.2显示页数:循环变量即为当前页数。

由于添加了进度条,这块代码被注释,使控制台输出更美观。

# 显示当前页数if self.page < 22: # 爬取前 21 页url = self.base_urls + str(self.page)print("\n正在爬取第", self.page, "页新闻………………………………………………………………………………")self.page += 1

3.2.3爬取动态数据:来源,移动端标题,文章类型,标题,来源_ID,来源图标,个人网站,发表时间,图片链接,标签,来源网址。

利用字符串组合得到动态页面链接的url,调用函数爬虫,数据存于item(CollectdataItem),利用try判断是否存在,存在才爬。

item = response.meta.get(item)req = json.loads(response.text)authorName, mobileTitle, contentType, title, authorId, authorPic, personalPage, pub_time, img_url, tag_name, originalSource = [], [], [], [], [], [], [], [], [], [], []for data in req:# 来源try:authorName.append(data[authorName]) # 来源except:print(f"\n\n{data}\n该项缺乏来源\n")authorName.append(\)# 移动端标题try:mobileTitle.append(data[mobileTitle]) # 移动端标题except:print(f"\n\n{data}\n该项缺乏移动端标题\n")mobileTitle.append(\)# 文章类型try:contentType.append(data[contentType]) # 文章类型except:print(f"\n\n{data}\n该项缺乏文章类型\n")contentType.append(\)# 标题try:title.append(data[ itle]) # 标题except:print(f"\n\n

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。