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

Python中的scrapy.linkextractors.LinkExtractor()用法

发布时间:2023-12-24 12:41:37

scrapy.linkextractors.LinkExtractor()是scrapy框架中的一个模块,用于从HTML响应中提取链接。它可以根据定义的规则来提取特定的链接,并返回一个Link对象的迭代器。

LinkExtractor类可以接受以下参数:

- allow:接受一个正则表达式或正则表达式列表作为参数,表示匹配链接URL的正则表达式。如果链接与任何一个表达式匹配,则该链接被接受。默认情况下,该参数为None。

- deny:接受一个正则表达式或正则表达式列表作为参数,表示拒绝匹配链接URL的正则表达式。如果链接与任何一个表达式匹配,则该链接被拒绝。默认情况下,该参数为None。

- allow_domains:接受一个域名字符串、字符串列表或正则表达式作为参数。只有链接URL的域名与该参数匹配时,链接才会被接受。默认情况下,该参数为None,表示不限制域名。

- deny_domains:接受一个域名字符串、字符串列表或正则表达式作为参数。只有链接URL的域名与该参数不匹配时,链接才会被接受。默认情况下,该参数为None,表示不限制域名。

- restrict_xpaths:接受XPATH表达式字符串列表,定义了可以提取链接的HTML范围。默认情况下,该参数为None,表示整个HTML页面。

- restrict_css:接受CSS选择器字符串列表,定义了可以提取链接的HTML范围。默认情况下,该参数为None,表示整个HTML页面。

- allow_tags:接受一个HTML标签字符串列表,只有包含在这些标签内的链接才会被接受。默认情况下,该参数为None,表示不限制标签。

- deny_tags:接受一个HTML标签字符串列表,包含在这些标签内的链接会被拒绝。默认情况下,该参数为None,表示不限制标签。

下面是一个使用LinkExtractor类的示例:

import scrapy
from scrapy.linkextractors import LinkExtractor

class MySpider(scrapy.Spider):
    name = 'example'

    def start_requests(self):
        start_urls = ['http://example.com']
        for url in start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 实例化一个LinkExtractor对象,并定义提取规则
        link_extractor = LinkExtractor(allow_domains='example.com', restrict_css='.posts')
        
        # 提取链接
        links = link_extractor.extract_links(response)
        
        # 处理提取到的链接
        for link in links:
            print(link.url)

        # 继续爬取下一页
        next_page_url = response.css('.next_page::attr(href)').get()
        if next_page_url:
            yield scrapy.Request(url=response.urljoin(next_page_url), callback=self.parse)

在上述示例中,我们定义了一个简单的爬虫,爬取了example.com网站下.posts类中的链接。首先,我们在start_requests方法中指定了要爬取的URL。然后,在parse方法中,我们实例化了一个LinkExtractor对象,并设置了allow_domainsrestrict_css参数。接下来,我们使用extract_links方法从响应中提取链接,并通过迭代打印每个链接的URL。最后,我们通过检查是否有下一页的URL,并通过构建新的请求来继续爬取。

这只是LinkExtractor类的一小部分用法示例,更多用法可以参考官方文档。