Scrapy入门-翻页爬取及抓取链接页内容

爬取目标

在前文《scrapy入门-环境安装及demo运行》中,我们了解了如何利用Scrapy框架进行单一网页的数据抓取。然而,很多场景下,想要抓取的数据比较多,会分好几页展示。一种常见的形式是,网站有一个索引页,索引页中包含许多列表项,同时有分页系统。点击索引页中的列表项,跳转到列表项对应的详情页中。

本文中,我们将以自如租房网页的抓取为例,介绍如何实现翻页爬取1-50页的租房列表爬取和每个房源链接详情页内容数据的爬取。

CrawlSpider

Scrapy提供了一个CrawlSpider类,我们仅需通过设定简单的抓取规则,即可完成上述爬取需求,链接的抽取,新页面的访问均在CrawlSpider内部实现。本例就依赖CrawlSpider来实现。

和前文一样,我们先通过命令“scrapy startproject ziruSpider”来创建一个新项目。在生成爬虫时,我们的命令和之前有所区别,需要采用命令“scrapy genspider –t crawl ziruspider ziroom.com”,表示采用模板crawl进行爬虫模板的生成。如下图

可以看到,这次生成的ZiruspiderSpider类继承的是CrawlSpider类,同时parse方法也不见了,取而代之的是parse_item方法。这是因为CrawlSpider帮我们实现了parse方法,我们默认仅需实现CrawlSpider匹配rules规则抓取到的页面的解析函数parse_item。

常规工作

在修改爬虫主逻辑前,我们先完成几个常规工作,一个是修改起始抓取网址,设置start_urls = [' http://hz.ziroom.com/z/']。然后定义抓取结果的数据结构Item,本例中为简化起见,我们仅抓取房屋详情页中的“房屋名称”,即上图2中的“自如友家·大美公寓·4居室-05卧”。

 

解析逻辑

要实现本文的爬取目标,我们要解决两个难题。一是在起始网页中想办法找到每一个列表详情页的链接地址,进行访问,然后解析出详情页里的“房屋名称”。二是想办法跳转到下一页,在下一页中继续难题一的工作。

得益于CrawlSpider的帮助,我们只需要在rules里用一个XPATH表达式指明应该去哪个元素里抽取链接,CrawlSpider即会自动访问元素里href属性的链接并获取链接的网页,并调用你的parse_item方法进行解析。所以,上述难题即简化成了如何定位链接详情页对应的元素,和如何定位下一页链接对应的元素。

和前文的老办法一样,浏览器上通过F12,可以快速找到对应的元素,即可得到其对应的XPATH表达式。关于XPATH的正确性也可以提前在控制台进行验证,这里不再赘述。

解析逻辑的完成代码如下图,代码中有详细的注释

通过scrapy crawl ziruspider 即可执行脚本,爬取数据。我们还可以在运行命令中增加-o [filename]选项来支持将内容输出到文件。比如“scrapy crawl ziruspider -o ziru.csv” 将结果存储到文件baidu.csv

至此,我们就完成了翻页数据和链接页内容的爬取学习,后续将放出更多的Scrapy功能演示案例,请点赞关注我吧。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值