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

Scrapy中LinkExtractor的URL匹配规则介绍

发布时间:2023-12-24 18:37:30

在Scrapy中,LinkExtractor是用于提取URL的一个类。它能够根据一定的规则从HTML文本中提取出符合条件的URL,并作为链接返回。LinkExtractor可以在Scrapy的Spider类中被使用。

LinkExtractor的主要参数有:allow,deny,allow_domains,deny_domains,restrict_xpaths和restrict_css。

1. allow:是一个正则表达式,用来匹配URL,只有匹配成功的URL才会被提取。

例如,我们设置allow为r'/news/.*',则只有以/news/开头的链接才会被提取。

2. deny:是一个正则表达式,用来排除一些URL,匹配成功的URL将不会被提取。

例如,我们设置deny为r'/news/.*$',则以/news/开头的链接将不会被提取。

3. allow_domains:是一个列表,用来指定仅提取特定域名下的链接。

例如,我们设置allow_domains为['example.com'],则只会提取example.com域名下的链接。

4. deny_domains:是一个列表,用来指定不提取特定域名下的链接。

例如,我们设置deny_domains为['example.com'],则不会提取example.com域名下的链接。

5. restrict_xpaths:是一个XPath表达式或者是由XPath表达式组成的列表,用来指定在哪些XPath表达式匹配到的节点中提取链接。

例如,我们设置restrict_xpaths为['//div[@class="news"]'],则只会在class为news的div节点中提取链接。

6. restrict_css:是一个CSS选择器或者是由CSS选择器组成的列表,用来指定在哪些CSS选择器匹配到的节点中提取链接。

例如,我们设置restrict_css为['div.news'],则只会在class为news的div节点中提取链接。

下面是一个使用LinkExtractor的实例:

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Spider

class MySpider(Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']

    def parse(self, response):
        # 创建一个LinkExtractor对象,提取满足规则的链接
        le = LinkExtractor(allow=r'/news/.*')

        # 使用LinkExtractor提取链接并进行处理
        for link in le.extract_links(response):
            yield {
                'url': link.url,
                'text': link.text
            }

以上代码中,我们首先导入了LinkExtractor类和Spider类。然后定义了一个继承自Spider类的自定义Spider类MySpider。在这个类中,我们指定了Spider的名称、允许的域名和起始URL。

在parse方法中,我们创建了一个LinkExtractor对象,并通过allow参数设置了链接提取的规则。然后使用extract_links方法提取链接,并进行处理,将链接的URL和文本内容保存为字典,并使用yield关键字返回。

总之,LinkExtractor是Scrapy中一个非常有用的类,可以根据设置的规则从HTML文本中提取URL,并且可以根据需要灵活地进行定制。通过合理地使用LinkExtractor,可以使爬虫的链接提取过程更加高效、准确。