资讯专栏INFORMATION COLUMN

深入理解scray源码之禁止翻页

olle / 365人阅读

摘要:通过阅读源码,我们发现的公开方法返回的是一个中的列表,而对象有四个槽。去掉翻页只含有数字的链接去掉翻页,长度小于,且含有页字的链接页你可以在中调用这个类,来检测一下它是否达到了过滤翻页链接的目的。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38238.html

相关文章

  • better-scroll与UC浏览器滑动翻页冲突的js解决方案

    摘要:问题最近在用写端项目时发现个问题,的横向滑动和浏览器的横向滑动翻页效果出现了冲突。思路我们虽然不能禁止浏览器的跳转操作,但是我们可以阻止滑动元素触发的所有默认事件啊。 问题: 最近在用vue写m端项目时发现个问题,better-scroll的横向滑动和UC浏览器的横向滑动翻页效果出现了冲突。 简单的说,就是滑动scroll组件的时候也会触发UC浏览器自带的翻页效果。 为此在网上找了不少...

    anquan 评论0 收藏0
  • 深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析

    摘要:虽然苹果官方提供了关于的与使用说明,但这并不能满足开发者们的需求,各类复杂场景依旧让我们焦头烂额,而解决方案却不易寻找。二源码下载编译及调试之前我们首先需要获取一份苹果官方的源码。 一、前言移动互联网时代,网页依旧是内容展示的重要媒介,这离不开 WebKit 浏览内核技术的支持与发展。在 iOS 平台下开发者们...

    funnyZhang 评论0 收藏0
  • HTML5 history API,创造更好的浏览体验

    摘要:而唯一不引发刷新的参数并不会发送到服务器,因此服务器无法获得状态。目前建议设置为空字符串。此外请注意,及本身调用时是不触发事件的。我认为,按照渐进增强的思路,这样就是最好的了,也就是只使用较少的代码优化高级浏览器的使用体验。 HTML5 history API有什么用呢? 从Ajax翻页的问题说起 请想象你正在看一个视频下面的评论,在翻到十几页的时候,你发现一个写得稍长,但非常有趣的评...

    zgbgx 评论0 收藏0

发表评论

0条评论

olle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<