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

使用Scrapy中的LinkExtractor提取网页中的外部链接

发布时间:2023-12-27 02:16:01

Scrapy是一个强大的Python网络爬虫框架,用于抓取和提取网页数据。LinkExtractor是Scrapy库中的一个工具类,用于提取给定网页中符合指定规则的链接。它可以提供很多选项来指定要提取的链接的类型、位置、限制条件等。本文将详细介绍如何在Scrapy中使用LinkExtractor来提取网页中的外部链接,并给出几个使用例子。

首先,要在Scrapy项目中使用LinkExtractor,需要在项目的settings.py文件中添加以下行来导入该类:

from scrapy.linkextractors import LinkExtractor

然后,在编写爬虫的时候,可以创建一个LinkExtractor对象,并利用它提取链接。LinkExtractor类有很多可配置的参数,下面将介绍其中几个参数的使用方法。

1. allow参数:用于指定提取链接的正则表达式规则。只有符合该规则的链接才会被提取。

link_extractor = LinkExtractor(allow=r'example\.com')

上述代码中,只会提取域名为example.com的链接。

2. deny参数:用于指定拒绝提取的链接的正则表达式规则。

link_extractor = LinkExtractor(deny=r'example\.com')

上述代码中,会提取除了域名为example.com之外的所有链接。

3. allow_domains参数:用于指定提取链接的域名。

link_extractor = LinkExtractor(allow_domains='example.com')

上述代码中,只会提取域名为example.com的链接。

4. deny_domains参数:用于指定拒绝提取的链接的域名。

link_extractor = LinkExtractor(deny_domains='example.com')

上述代码中,会提取除了域名为example.com之外的所有链接。

5. restrict_xpaths参数:用于指定链接的位置。可以通过XPath表达式来指定位置。

link_extractor = LinkExtractor(restrict_xpaths='//div[@class="content"]')

上述代码中,只会提取在class属性为content的div标签下的链接。

上面给出的只是LinkExtractor类的一些常用参数,实际上LinkExtractor还有很多其他可配置的参数,可以根据具体需求进行使用。

下面我们通过一个具体的例子来演示如何使用LinkExtractor提取网页中的外部链接。

假设我们要爬取一个新闻网站的新闻标题和相关链接。首先,创建一个Scrapy项目:

scrapy startproject news_spider
cd news_spider
scrapy genspider news_news news.com

然后,在项目的spiders目录下打开news_news.py文件,删除生成的示例代码,并添加以下代码:

import scrapy
from scrapy.linkextractors import LinkExtractor

class NewsSpider(scrapy.Spider):
    name = 'news_news'
    
    start_urls = ['http://www.news.com/']
    
    def parse(self, response):
        link_extractor = LinkExtractor(allow_domains='news.com')
        links = link_extractor.extract_links(response)
        
        for link in links:
            yield {
                'title': response.css('h1::text').get(),
                'url': link.url
            }

在上述代码中,我们首先定义了一个LinkExtractor对象link_extractor,使其只提取域名为news.com的链接。然后,使用extract_links方法提取链接,并逐个处理。最后,以字典形式yield返回了新闻标题和相关链接。

最后,运行爬虫:

scrapy crawl news_news -o news.csv

上述命令会将爬取到的新闻标题和相关链接保存在一个名为news.csv的CSV文件中。

以上就是使用Scrapy中的LinkExtractor提取网页中的外部链接的方法和一个使用例子。希望对你有所帮助!