scrapy 爬取Curlie实验报告

2018-05-20  本文已影响0人  何春春春春

(代码文件链接见第六点)

1.实验目的

本次实验是为了掌握scrapy爬取层级网站信息的技巧。

2.实验要求

使用scrapy爬取Curlie网站的News目录下(https://curlie.org/News/)所有的子项目的网站标题、Url和网站描述信息,并且将News目录下面的子项目生成具有Json格式的目录结构的目录。

3.实验工具

centos2.7、Python3.6.5、scrapy1.5.0

4.实验方案设计

分析目标网页规则,制定爬虫策略--->编写Python代码--->进行代码调试---->处理爬虫数据,生成最后爬虫结果

5.实验过程

2.根据实验要求可以看出我们主要爬取的是NEWS下面的Subcategories 下的Sites的内容,由图可以看出,我们需要爬取的列表信息都在//section[@class='children']/div这个标签下。
针对每一个Sites我们需要爬取的信息有


对象

这三个对象在网站中的位置为


position
因而我们小组的大致爬虫思路为:因为需要遍历News下的所有目录,所以我们小组选择使用适用于爬取批量网页的类CrawlSpider,用rules来提取页面的链接。linkextractor(allow=(正则表达式),restrict_xpaths=())提取页面内的超链接,allow限制只允许提取符合正则表达式的url,restrict_xpaths用xpath定位提取的url在页面的位置,和allow共同作用过滤链接。Rule从起始页用提取符合规则的链接,通过这个链接再生成Request,如此循环,直至没有符合要求的链接。并用callback解析返回的结果。
下面是我们的python代码思路解析
代码思路

6.实验结果

附代码及结果数据文件:curlie项目代码及结果数据文件(news.jl、curlie1.json)

部分结果截图
News页面下的部分站点.png

7.其它尝试

除了上述的数据之外,我们通过变更Rule爬取了url中包含'News'的站点:
(变更后的Rule)——

  Rule(LinkExtractor(allow=(r'[\s\S]*News[\s\S]*'),restrict_xpaths=('//section[@class="children"]//div[@class="cat-item"]')),callback="parse_item",follow=True),#url包含News的都要

详细结果文件见代码文件链接中的results.jl
下面是部分结果截图


部分结果.png
上一篇 下一篇

猜你喜欢

热点阅读