在用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条件,扩展这个类。


PETCoder亚洲善待程序猿组织
225 声望33 粉丝

Sorry, but I have to leave.-Weibo


« 上一篇
rss更新频率
下一篇 »
xpath学习