zoukankan      html  css  js  c++  java
  • scrapy LinkExtractors

    class scrapy.linkextractors.LinkExtractor
    

    Link Extractors 的目的很简单: 提取链接。

    每个LinkExtractor有唯一的公共方法是 extract_links(),它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。

    Link Extractors要实例化一次,并且 extract_links 方法会根据不同的 response 调用多次提取链接。

    class scrapy.linkextractors.LinkExtractor(
        allow = (),
        deny = (),
        allow_domains = (),
        deny_domains = (),
        deny_extensions = None,
        restrict_xpaths = (),
        tags = ('a','area'),
        attrs = ('href'),
        canonicalize = True,
        unique = True,
        process_value = None
    )

    主要参数:

    • allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

    • deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。

    • allow_domains:会被提取的链接的domains。

    • deny_domains:一定不会被提取链接的domains。

    • restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。

    rules

    在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了特定操作。如果多个rule匹配了相同的链接,则根据规则在本集合中被定义的顺序,第一个会被使用。

    class scrapy.spiders.Rule(
            link_extractor, 
            callback = None, 
            cb_kwargs = None, 
            follow = None, 
            process_links = None, 
            process_request = None
    )
    • link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。

    • callback: 从link_extractor中每获取到链接时,参数所指定的值作为回调函数,该回调函数接受一个response作为其第一个参数。

    注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。

    • follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果callback为None,follow 默认设置为True ,否则默认为False。

    • process_links:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。

    • process_request:指定该spider中哪个的函数将会被调用, 该规则提取到每个request时都会调用该函数。 (用来过滤request)

    爬取规则(Crawling rules)

    1.首先运行

    scrapy shell "http://hr.tencent.com/position.php?&start=0#a"

    2.导入LinkExtractor,创建LinkExtractor实例对象。:

    from scrapy.linkextractors import LinkExtractor
    
     page_lx = LinkExtractor(allow=('position.php?&start=d+'))

    #allow : LinkExtractor对象最重要的参数之一,这是一个正则表达式,必须要匹配这个正则表达式(或正则表达式列表)的URL才会被提取,如果没有给出(或为空), 它会匹配所有的链接。

      #deny : 用法同allow,只不过与这个正则表达式匹配的URL不会被提取)。它的优先级高于 allow 的参数,如果没有给出(或None), 将不排除任何链接。

    3.调用LinkExtractor实例的extract_links()方法查询匹配结果:

    page_lx.extract_links(response)

    4.没有查到:

     []

    5.修改匹配规则。

  • 相关阅读:
    动态归划之不同路径走法之和
    【转】在ADO.NET中使用参数化SQL语句的大同小异
    asp.net C#如何实现验证码不区分大小写
    用C# + SqlServer2005 实现的treeview动态树形菜单
    捕捉用户的输入,用回车提交
    【转载】在一个aspx或ashx页面里进行多次ajax调用
    【转】在ashx页面中context.Session["xxx"]获取不到值的解决办法
    【转载】【很不错的文章,值得一看】实现小数据量和海量数据的通用分页显示存储过程
    【原创】纯javascript实现银行卡号的Luhn验证或校验算法
    Sql
  • 原文地址:https://www.cnblogs.com/sneike/p/9206765.html
Copyright © 2011-2022 走看看