Scrapy中LinkExtractors的常用函数和方法
Scrapy中的LinkExtractor(链接提取器)是一个用于从HTML响应中提取链接的类。它可以根据一些规则来提取并返回所有符合规则的链接。
常见的函数和方法有:
1. LinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths=(), tags=('a', 'area'), attrs=('href',)):
- allow:接受链接的正则表达式列表;
- deny:拒绝链接的正则表达式列表;
- allow_domains:接受链接的域名列表;
- deny_domains:拒绝链接的域名列表;
- restrict_xpaths:使用XPath选择器来限制链接的范围;
- tags:需要提取链接的HTML标签列表;
- attrs:需要提取链接的HTML属性列表。
以下是一些例子,展示了如何使用LinkExtractor的常见函数和方法:
import scrapy
from scrapy.linkextractors import LinkExtractor
class MySpider(scrapy.Spider):
name = 'my_spider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
def parse(self, response):
# 创建LinkExtractor对象
link_extractor = LinkExtractor(allow=('item',))
# 从response中提取满足allow规则的链接
links = link_extractor.extract_links(response)
for link in links:
yield scrapy.Request(url=link.url, callback=self.parse_item)
def parse_item(self, response):
# 在parse_item中继续提取满足allow规则的链接
link_extractor = LinkExtractor(allow=('detail',))
links = link_extractor.extract_links(response)
for link in links:
yield scrapy.Request(url=link.url, callback=self.parse_detail)
def parse_detail(self, response):
# 获取链接的文本内容和URL地址
link_extractor = LinkExtractor()
links = link_extractor.extract_links(response)
for link in links:
text = link.text
url = link.url
print(f'Text: {text}, URL: {url}')
上述代码展示了如何在Scrapy的Spider中使用LinkExtractor进行链接提取。首先,我们创建LinkExtractor对象,并传入一些规则来指定需要提取的链接。然后,在parse方法中使用extract_links函数从响应中提取满足规则的链接,并使用yield关键字返回Request对象。在parse_item和parse_detail方法中,我们可以继续使用LinkExtractor来提取更多的链接。
通过LinkExtractor提取的链接是Link对象的列表,我们可以通过Link对象的属性来获取链接的文本内容和URL地址。
总结起来,Scrapy中的LinkExtractor是一个非常方便的工具,可以帮助我们从HTML响应中快速、灵活地提取链接。它提供了多个函数和方法,根据我们的需求选择合适的规则进行链接提取。
