爬虫框架Scrapy(8)使用 LinkExtractor 提取链接

文章目录使用 LinkExtractor 提取链接1. 提取链接的方法(1)使用Selector(2)使用LinkExtractor2. LinkExtractor 提取链接的规则(1)allow(2)deny(3)allow_domains(4)deny_domains(5)restrict_xpaths(6)restrict_css(7)tags(8)attrs(9)process_value使用 LinkExtractor 提取链接1. 提取链接的方法在爬取一个网站时,想要爬取的数据通常分布在多
摘要由CSDN通过智能技术生成

使用 LinkExtractor 提取链接

1. 提取链接的方法

在爬取一个网站时,想要爬取的数据通常分布在多个页面中,每个页面包含一部分数据以及到其他页面的链接,提取页面中数据的方法大家已经掌握,提取链接有使用 Selector 和使用 LinkExtractor 两种方法。

(1)使用Selector

因为链接也是页面中的数据,所以可以使用与提取数据相同的方法进行提取,在提取少量链接或提取规则比较简单时,使用 Selector 就足够了。例如我们在项目 toscrapy 中编写爬虫 books.py 的数据解析函数 parse() 时,就是用了 Selector 提取了下一个页面的链接,代码如下:

class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']

    def parse(self, response):
        ......

        # 提取链接
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url, callback=self.parse)

第一种方法我们早已掌握,下面学习如何使用 LinkExtractor 提取链接。

(2)使用LinkExtractor

Scrapy 提供了一个专门用于提取链接的类 LinkExtractor,在提取大量链接或提取规则比较复杂时,使用 LinkExtractor 更加方便。

LinkExtractor 的使用非常简单,我们通过将上述代码中的 Selector 替换成 LinkExtractor 进行讲解,代码如下:

from scrapy.linkextractors import LinkExtractor

class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']
    
    def parse(self, response):
        ...
        # 提取链接 
        le = LinkExtractor(restrict_css='ul.pager li.next') 
        links = le.extract_links(response) 
        if links:
            next_url = links[0].url 
            yield scrapy.Request(next_url, callback=self.parse)

代码解析如下:

  • Step 1:创建一个 LinkExtractor 对象,使用一个或多个构造器参数描述提取规则。这里传递给 restrict_css 参数一个 CSS 选择器表达式。它描述出下一页链接所在的区域(在 li.next 下)。
  • Step 2:调用 LinkExtractor 对象的 extract_links 方法传入一个 Response 对象,该方法依据创建对象时所描述的提取规则, 在 Response 对象所包含的页面中提取链接,最终返回一个列表,其中的每一个元素都是一个 Link 对象,即提取到的一个链接。
  • Step 3:由于页面中的下一页链接只有一个,因此用 links[0] 获取 LinkExtractor 对象,LinkExtractor 对象的 url 属性便是链接页面的绝对 url 地址(无须再调用 response.urljoin 方法),用其构造 Request 对象并提交。
2. LinkExtractor 提取链接的规则

接下来,我们来学习使用 LinkExtractor 的构造器参数描述提取链接的规则。

首先我们创建两个包含多个链接的HTML页面,作为 LinkExtractor 提取链接的示例网页:

<!-- example1.html -->
<html>
    <body>
        <div id="top">
            <p>下面是一些站内链接</p>
            <a class="internal" href="/intro/install.html">Installation guide</a>
            <a class
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy是一个适用于Python的快速、高层次的屏幕抓取和web抓取框架。它可以用于抓取web站点并从页面中提取结构化的数据。Scrapy的用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个框架,可以根据需求进行定制,并提供了多种类型爬虫的基类,如BaseSpider和sitemap爬虫等。最新版本还提供了对web2.0爬虫的支持。 网络爬虫框架Scrapy还有一些基本模块,包括spiders、items、pipelines和middlewares等。其中,spiders下的jingding.py是Scrapy自动生成的爬虫文件,它继承了scrapy.Spider类,这是Scrapy中最基本的类,所有编写的爬虫都必须继承这个类。在jingding.py文件中,可以定义需要爬取的网站的URL和解析响应的方法等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [爬虫框架 Scrapy 详解](https://blog.csdn.net/m0_67403076/article/details/126081516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [开源python网络爬虫框架Scrapy.pdf](https://download.csdn.net/download/weixin_72426331/85854755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值