在用scrapy
爬取新闻网站时,我们可能只希望爬取最新的新闻。这时我们需要提供一个禁止翻页的逻辑。
而scrapy.linkextractors.LinkExctractor
并没有提供这样的接口。
所以我们需要自己构建一个新的link extractor
。通过阅读源码,我们发现LinkExtractor 的公开方法extract_links
返回的是一个scrapy.link
中的Link
列表,而Link
对象有四个槽:url
,text
, fragment
, nofollow
。我们在这里我们只要对url
属性做一下过滤就可以了。
from scrapy.linkextractors import LinkExtractor
class LinKExtractorPlus(LinkExtractor):
def __init__(self, *args, **kwargs):
LinkExtractor.__init__(self, *args, **kwargs)
def extract_links(self, response):
links = super(LinKExtractorPlus, self).extract_links(response)
# 去掉翻页(只含有数字的链接)
links = filter(lambda x: not (x.text.isdigit()), links)
# 去掉翻页,长度小于5,且含有"页"字的链接
links = filter(lambda x: not (len(x.text) < 5 and u'页' in x.text), links)
return links
你可以在scrapy shell
中调用这个类,来检测一下它是否达到了过滤翻页链接的目的。
你也可以通过增加filter
条件,扩展这个类。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。