使用LinkExtractor 提取链接
提取链接的两种方法:
- Selector
- LinkExtractor
之前的代码是使用的Selector,这里就不再做介绍了,开始LinkExtractor的学习
1.使用LinkExtractor
from scrapy.linkextractors import LinkExtractor
# 提取链接
# 下一页的url在 ul.pager > li.next > a 里面
# next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
# if next_url:
# # 如果找到下一页的url,得到绝对路径,构造新的Response对象
# next_url = response.urljoin(next_url)
# yield scrapy.Request(next_url, callback=self.parse)
le = LinkExtractor(restrict_css='ul.pager li.next')
links = le.extract_links(response)
if links:
next_url = links[0].url
yield scrapy.Request(next_url,callback=self.parse)
- 描述提取规则
LinkExtractor构造器参数:
- allow
接收一个正则表达式或一个正则表达式列表,提取绝对url与正则表达式匹配的链接。如果该参数为空(默认),就提取全部链接。 deny
接收一个正在则表达式或一个正则表达式列表,与allow相反,排除绝对url与正则表达式匹配的链接。
allow_domains
接收一个域名或一个域名列表,提取到指定域的链接
deny_domains
猜到了吧,与allow_domains相反,排除指定域的链接
restrict_paths
接收一个XPath表达式或一个XPath表达式列表,提取XPath表达式选中区域下的链接
restrict_css
接收一个CSS选择器或一个CSS选择器列表,提取CSS选择器选中区域下的链接
tags
接收一个标签/标签列表,提取指定标签内的链接,默认为 ['a','area']
attrs
接收一个属性/属性列表,提取指定属性内的链接,默认为 ['href']
process_value
接收一个形如func(value)的回调函数,如果传递了该参数,LinkExtractor将调用该回调函数对提取的每一个链接进行处理,回调函数正常情况下应返回一个字符串,想要抛弃所处理的链接时,返回None