用scrpay实现列表页详情页的抽取

中国的技术人员对爬虫很感兴趣,一来这东西确实有点技术含量;二来搞垃圾站做网赚要用到爬虫:自己整个小站,用爬虫抄袭别人的内容,挂挂外链,弄弄长尾seo,然后挂广告赚钱。

但其实我们做的工作不全是爬虫,更多的是内容的抽取,即web scraping。一般搜索引擎用到的爬虫,是存取整个html页面,然后建立索引,供用户搜索,这叫crawling。中国一般用一个爬虫就指代了两者,不做区分。

做内容抽取,通常用xpath、正则表达式来定义需要抽取的内容规则,不同的页面规则不相同,爬取不同的页面就要创建和维护不同的规则,比较麻烦,除此之外还要考虑批量爬取和增量爬取的配合。

一般做一次定向爬取,采用列表页+详情页的模式比较常见,以前用过一个工具叫做webharvest,demo的例子里直接有如何做列表页+详情页的抽取,但是webharvest近四年来都没有更新,最近一次使用发现,GUI控制界面居然无法打开配置文件和正常关闭,果断放弃之。最后回到scrapy。

scrapy是python的一个爬虫框架,所谓框架,在于帮助你将注意力焦点放在业务逻辑上,而不是种种繁琐的、重复的、已经有通过解决方案的技术细节,在爬虫这块则是:任务调度、dns缓存、网络访问等等。使用scrapy,你只需要指定你要爬什么网站、爬什么页面、内容在页面的什么部位、最后的结果如何存储,即可。

列表页+详情页的内容抽取,关键在于待爬取的url只是页面页面,如第一页,第二页,。。。,和详情页,其他的页面都无需考虑。而一般爬虫的逻辑是:给定起始页面,发起访问,分析页面包含的所有其他链接,然后将这些链接放入队列,再逐次访问这些队列,直至边界条件结束。为了针对列表页+详情页这种模式,需要对链接抽取(link extractor)的逻辑进行限定。好在scrapy已经提供,关键是你知道这个接口,并灵活运用。

rules = (Rule(SgmlLinkExtractor(allow=('category/20/index_\d+\.html'), restrict_xpaths=("//div[@class='left']"))),
		Rule(SgmlLinkExtractor(allow=('a/\d+/\d+\.html'), restrict_xpaths=("//div[@class='left']")), callback='parse_item'),
	)

Rule是在定义抽取链接的规则,上面的两条规则分别对应列表页的各个分页页面和详情页,关键点在于通过restrict_xpath来限定只从页面特定的部分来抽取接下来将要爬取的链接。





转载于:https://my.oschina.net/u/242141/blog/225215

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值