le = LinkExtractor(restrict_css='ul.pager li.next')
links = le.extract_links(response)
使用LinkExtractor的过程:
- 导入LinkExtractor,它是在scrapy中linkextractors中
- 创建一个Linkextractor对象,使用一个或者多个构造器参数描述提取规则,这里传递给restrict_css参数一个CSS选择器表达式。它描述了下一页链接所在的区域(在li.next下)
- 调用LinkExtractor对象的extract_links方法传入一个response对象,这个方法一句创建对象的时候描述的的提取规则,在这个response对象的页面中提取链接,最终返回一个列表,其中的每一个元素都是个link对象,也就是提取到的链接
- 由于页面中的下一页链接只有一个,因此用links[0]获取link对象,link对象的url属性就是链接页面的绝对url地址(无须在调用response.urljoin方法),用它构造request对象并再次提交
描述提取规则
特殊情况:
LinkExtractors构造器的所有的参数都是有默认值的,如果构造对象的时候不传入任何参数,就会自动提取页面中的所有的链接
LinkExtractor构造器的各个参数:
- allow
- 正则表达式或者正则表达式列表,提取绝对url和正则表达式匹配的链接,如果为空就会提取所有的链接
- deny
- 正则表达式或者正则表达式列表,与allow相反,排除绝对url与正则表达式匹配的链接
- allow_domains
- 接受一个域名或者一个域名列表,提取到指定域的链接
- deny_domains
- 接受一个域名或者一个域名列表,与allow_domains相反,排除指定域名的链接
- restrict_xpaths
- 接收一个xpath表达式或者一个xpath表达式列表,提取xpath表达式中区域下的链接
- restrict_css
- 接受一个css选择器或者css选择器列表,提取css选择器中指定区域下的链接
- tags
- 接受一个标签(字符串)或者一个标签列表,提取指定标签内的链接
- attrs
- 接收一个属性(字符串)或者一个属性列表,提取指定区域内的链,默认是['href']
- process_value
- 接收一个形如func(value)的回调函数。如果传递了该函数,LinkExtractor将会调用这个回调函数对提取的每一个链接进行处理,回调函数正常情况下应该返回一个字符串(处理结果),想要抛弃所处理的连接的时候,返回None
- allow