欢迎访问宙启技术站
智能推送

Scrapy中LinkExtractor()的用法详解

发布时间:2024-01-07 00:03:44

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 的参数来灵活地提取符合规则的链接。