Scrapy中LinkExtractor()的用法详解
LinkExtractor 是 Scrapy 提供的一个用于提取链接的类。它能够根据用户定义的规则从网页中提取出符合规则的链接。
LinkExtractor 可以通过构造函数的参数来设置提取链接的规则。常用的参数如下:
1. allow:是一个正则表达式或正则表达式的列表,用于匹配将被提取的链接。
2. deny:是一个正则表达式或正则表达式的列表,用于匹配不被提取的链接。
3. allow_domains:是一个域名的列表,用于指定只有指定域名下的链接才会被提取。
4. deny_domains:是一个域名的列表,用于指定不会被提取的域名。
5. restrict_xpaths:是一个 XPath 表达式的列表,用于过滤只有指定 XPath 表达式定位的链接才会被提取。
6. restrict_css:是一个 CSS 选择器的列表,用于过滤只有指定 CSS 选择器定位的链接才会被提取。
7. tags:是一个字符串或字符串列表,用于指定只有指定标签下的链接才会被提取。
8. attrs:是一个字典,用于指定需要提取的链接所对应的标签的属性。
9. unique:用于指定是否提取的链接去重。
下面是一个使用 LinkExtractor 的示例:
import scrapy
from scrapy.linkextractors import LinkExtractor
class MySpider(scrapy.Spider):
name = 'example'
start_urls = ['http://example.com']
def parse(self, response):
# 创建一个 LinkExtractor 对象,设置提取链接的规则
link_extractor = LinkExtractor(allow_domains=['example.com'])
# 使用 link_extractor 提取链接
links = link_extractor.extract_links(response)
# 遍历提取到的链接
for link in links:
# 打印链接
yield {'url': link.url}
在上面的示例中,首先我们创建了一个 LinkExtractor 对象 link_extractor,并使用 allow_domains 参数指定只提取 example.com 域名下的链接。然后,我们使用 link_extractor.extract_links(response) 方法从响应中提取符合规则的链接。最后,我们使用 for 循环遍历提取到的链接,并将其打印出来。
除了在 Spider 中使用 LinkExtractor 进行链接提取,还可以在 Scrapy Shell 中使用 LinkExtractor 进行测试。可以通过以下命令来进入 Scrapy Shell:
scrapy shell http://example.com
然后,可以使用以下命令来测试 LinkExtractor:
from scrapy.linkextractors import LinkExtractor
# 创建一个 LinkExtractor 对象,设置提取链接的规则
link_extractor = LinkExtractor(allow_domains=['example.com'])
# 使用 link_extractor 提取链接
links = link_extractor.extract_links(response)
# 打印提取到的链接
for link in links:
print(link.url)
上面的代码会输出 example.com 域名下的所有链接。
这就是使用 LinkExtractor 进行链接提取的详细用法。根据不同的需求,可以通过调整 LinkExtractor 的参数来灵活地提取符合规则的链接。
