资讯专栏INFORMATION COLUMN

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

olle / 261人阅读

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

在用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
  • Android特效 - 收藏集 - 掘金

    摘要:关于最友好的文章背压掘金前言背压可能是所有想要深入运用的朋友必须理解的一个概念。一概述这两天时间动手撸了个视图扩散切换效果的控制器,兼容至,更方便我们在视图切自定义控件之像一样使用添加和掘金添加和,实现像和一样的和和方法。 Android仿探探堆叠滑动控件(支持方向控制,内嵌入RecyclerView) - Android - 掘金堆叠滑动控件,类似于社交软件探探的效果,并增加以下扩展...

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

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

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

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

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

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

    SHERlocked93 评论0 收藏0

发表评论

0条评论

olle

|高级讲师

TA的文章

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