scrapy中使用LinkExtractor提取链接

le = LinkExtractor(restrict_css='ul.pager li.next')
links = le.extract_links(response)
 
使用LinkExtractor的过程:
  1. 导入LinkExtractor,它是在scrapy中linkextractors中
  2. 创建一个Linkextractor对象,使用一个或者多个构造器参数描述提取规则,这里传递给restrict_css参数一个CSS选择器表达式。它描述了下一页链接所在的区域(在li.next下)
  3. 调用LinkExtractor对象的extract_links方法传入一个response对象,这个方法一句创建对象的时候描述的的提取规则,在这个response对象的页面中提取链接,最终返回一个列表,其中的每一个元素都是个link对象,也就是提取到的链接
  4. 由于页面中的下一页链接只有一个,因此用links[0]获取link对象,link对象的url属性就是链接页面的绝对url地址(无须在调用response.urljoin方法),用它构造request对象并再次提交

描述提取规则

  特殊情况:

    LinkExtractors构造器的所有的参数都是有默认值的,如果构造对象的时候不传入任何参数,就会自动提取页面中的所有的链接

  LinkExtractor构造器的各个参数:

    1. allow
      1. 正则表达式或者正则表达式列表,提取绝对url和正则表达式匹配的链接,如果为空就会提取所有的链接
    2. deny
      1. 正则表达式或者正则表达式列表,与allow相反,排除绝对url与正则表达式匹配的链接
    3. allow_domains
      1. 接受一个域名或者一个域名列表,提取到指定域的链接
    4. deny_domains
      1. 接受一个域名或者一个域名列表,与allow_domains相反,排除指定域名的链接
    5. restrict_xpaths
      1. 接收一个xpath表达式或者一个xpath表达式列表,提取xpath表达式中区域下的链接
    6. restrict_css
      1. 接受一个css选择器或者css选择器列表,提取css选择器中指定区域下的链接
    7. tags
      1. 接受一个标签(字符串)或者一个标签列表,提取指定标签内的链接
    8. attrs
      1. 接收一个属性(字符串)或者一个属性列表,提取指定区域内的链,默认是['href']
    9. process_value
      1. 接收一个形如func(value)的回调函数。如果传递了该函数,LinkExtractor将会调用这个回调函数对提取的每一个链接进行处理,回调函数正常情况下应该返回一个字符串(处理结果),想要抛弃所处理的连接的时候,返回None

猜你喜欢

转载自www.cnblogs.com/tulintao/p/11703096.html