使用LinkExtractor提取链接

目的

提取网站链接

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修改book_spider.py代码
class BooksSpider(scrapy.Spider):
..........
def parse(self, response):
........
# 创建一个LinkExtractor对象,在restrict_css参数中传递一个css选择器表达式
le = LinkExtractor(restrict_css='ul.pager li.next')
# 该方法依据创建对象时所描述的提取规则,在Response对象所包含的
# 页面中提取链接,最终返回一个列表,其中每一个元素都是一个Link对象
links = le.extract_links(response)
if links:
# 因为页面中只有一个下一页链接,因此用link[0]获取Link对象,该对象的url属性便是链接页面的绝对url
next_url = links[0].url
yield scrapy.Request(next_url, callback=self.parse)
1
2
3
4
5
# LxmlLinkExtractor构造器
def __init__(self, allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths=(),
tags=('a', 'area'), attrs=('href',), canonicalize=False,
unique=True, process_value=None, deny_extensions=None, restrict_css=(),
strip=True):

参数解析

  • allow

    接收一个正则表达式或正则列表,提取绝对url和正则匹配的链接,如果参数为空,就提取全部链接

  • deny

    接收一个正则表达式或正则列表,排除绝对url与正则表达式匹配的链接

  • allow_domains

    接收一个域名或一个域名列表,提取到指定域名的链接(如提取当前页面所有到baidu.com和google.com这2个域名的链接)

  • deny_domains

    接收一个域名或一个域名列表,排除到指定域名的链接

  • restrict_xpaths

    接收一个XPath表达式或列表,提取所选区域下的链接

  • restrict_css

    接收一个CSS表达式或列表,提取所选区域下的链接

  • tags

    接收一个标签(字符串)或一个标签列表,默认为[‘a’,’area’]

  • attrs

    接收一个属性(字符串)或列表,提取属性内的链接

  • process_value
赏个🍗吧
0%