python爬虫框架Scrapy基本应用学习教程

Python爬虫框架Scrapy基本应用学习教程

简介

Scrapy是Python的一个强大的、灵活的、高效的开源网络爬虫框架。它用于从网站上获取有价值的数据,支持处理静态和动态网页,支持多级页面的爬取,可实现高效、快速、可靠的数据获取。同时,Scrapy提供了很多方便的工具,如合理的数据结构、快速的HTML/XML解析、多线程等,简化了爬取网站数据的过程。

这个教程将介绍Scrapy的基本应用,包括创建爬虫、添加爬取规则、处理爬取数据、数据存储等。本教程将使用Python 3.x版本和Scrapy 2.x版本。

爬虫创建

Scrapy使用命令行工具创建爬虫。可在命令行输入以下命令创建一个名为“example_spider”的爬虫:

scrapy genspider example_spider example.com

“example.com”是我们要爬取的目标网站。

爬虫创建完毕后,可以在生成的“example_spider.py”文件中编写代码。

添加爬取规则

爬虫可以通过添加规则来确定要爬取的URL和内容。例如:

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

    rules = (
        Rule(LinkExtractor(allow=r'category\.php'), follow=True),
        Rule(LinkExtractor(allow=r'article\.php'), callback='parse_item', follow=False),
    )

    def parse_item(self, response):
        pass

以上代码中,我们添加了两个规则。第一个规则用于匹配URL中包含“category.php”的链接,并追踪这些链接;第二个规则用于匹配URL中包含“article.php”的链接,当这些链接被访问时,调用“parse_item”函数来处理响应的数据,并停止追踪新链接。

处理爬取数据

在Scrapy中,爬取的数据可以通过对响应的HTTP请求进行解析得到。一般情况下,我们可以使用XPath或CSS选择器来从HTML或XML文档中提取所需信息。

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

    def parse(self, response):
        for sel in response.xpath('//div[@class="product-info"]'):
            item = {}
            item['title'] = sel.xpath('h2/a/text()').extract_first()
            item['link'] = sel.xpath('h2/a/@href').extract_first()
            item['description'] = sel.xpath('text()').extract_first()
            yield item

以上代码中,我们通过XPath选择器提取了HTML文档中的“title”、“link”和“description”信息。

数据存储

Scrapy已经支持多种数据存储格式。例如,我们可以将数据存储到JSON文件中:

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

    def parse(self, response):
        items = []
        for sel in response.xpath('//div[@class="product-info"]'):
            item = {}
            item['title'] = sel.xpath('h2/a/text()').extract_first()
            item['link'] = sel.xpath('h2/a/@href').extract_first()
            item['description'] = sel.xpath('text()').extract_first()
            items.append(item)
        return items

    def closed(self, reason):
        with open('items.json', 'w') as f:
            json.dump(self.items, f)

以上代码中,我们将提取到的数据存储到了“items.json”文件中。

示例说明

以下给出两个Scrapy爬虫的示例。

示例1:提取糗事百科网站的段子

import scrapy

class QiuBaiSpider(scrapy.Spider):
    name = 'qiubai'
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        for article in response.css('div.article'):
            yield {
                'author': article.css('h2::text').get().strip(),
                'content': article.css('div.content span::text').getall(),
                'url': response.urljoin(article.css('a.contentHerf::attr(href)').get())
            }

        next_url = response.css('ul.pagination li:last-child a::attr(href)').get()
        if next_url is not None:
            yield response.follow(next_url, callback=self.parse)

该爬虫可以从糗事百科网站提取段子的作者、内容和URL,并支持翻页。

示例2:提取腾讯新闻网站的科技新闻

import scrapy

class TencentSpider(scrapy.Spider):
    name = 'tencent'
    start_urls = ['https://tech.qq.com/']

    def parse(self, response):
        for article in response.css('div.flashPicContainer > .item'):
            yield {
                'title': article.css('a::text').get().strip(),
                'url': response.urljoin(article.css('a::attr(href)').get()),
                'datetime': article.css('span.time::text').get().strip()
            }

        next_url = response.css('div.mod_pages a.pgNext::attr(href)').get()
        if next_url is not None:
            yield response.follow(next_url, callback=self.parse)

该爬虫可以从腾讯新闻网站提取科技新闻的标题、URL和时间,并支持翻页。

总结

Scrapy是一个灵活、高效的爬虫框架,支持多级页面特征提取和多种数据存储格式等功能。在本教程中,我们介绍了Scrapy的基础应用,包括如何创建爬虫、添加爬取规则、处理爬取数据和数据存储。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬虫框架Scrapy基本应用学习教程 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python中datetime常用时间处理方法

    Python中datetime常用时间处理方法 Python中datetime是常用的时间处理模块,主要提供时间日期的各种操作方法。在日常开发中,经常会用到各种时间处理、格式化时间等功能,本文将介绍一些Python中datetime常用的时间处理方法。 获取当前时间 获取当前时间可以使用datetime模块中的datetime类的now()方法,该方法返回当…

    python 2023年6月2日
    00
  • Python 创建命名元组

    Python中的命名元组是一种内置的数据类型,它允许我们定义一个具有固定字段名称的元组。这个元组可以像一个普通元组一样被访问、索引和切片,而且由于具有有意义的字段名称,因此比使用普通元组更加易读和可维护。 下面是Python创建命名元组的步骤: 导入namedtuple模块:使用命名元组需要导入namedtuple模块。 from collections i…

    python-answer 2023年3月25日
    00
  • python中字符串比较使用is、==和cmp()总结

    Python中字符串比较有三种方式:is、==和cmp()。接下来我们来详细讲解这三种方式的使用以及它们之间的区别。 字符串比较使用 is is是Python中的一种运算符,用于比较两个对象的内存地址是否相同。使用is来比较两个字符串时,如果两个字符串的内存地址相同,那么返回True,否则返回False。 例如,我们定义两个字符串,然后将它们分别赋值给两个变…

    python 2023年6月5日
    00
  • 在Python中实现字典反转案例

    要实现Python中字典反转,需要使用到字典的相关方法。下面是实现字典反转的完整攻略。 步骤一:创建需要反转的字典 首先,需要创建一个需要被反转的字典,示例代码如下。 # 创建需要反转的字典 original_dict = {"a": 1, "b": 2, "c": 3, "d"…

    python 2023年6月3日
    00
  • python3+PyQt5+Qt Designer实现界面可视化

    下面是Python3+PyQt5+Qt Designer实现界面可视化的完整攻略: 1. 安装PyQt5和Qt Designer 在开始之前,需要先安装PyQt5和Qt Designer。如果你使用的是pip,可以直接在终端中运行下面的命令进行安装: pip3 install PyQt5 pyqt5-tools 如果你使用的是Anaconda,可以在Anac…

    python 2023年6月13日
    00
  • python 正则表达式如何实现重叠匹配

    以下是“Python正则表达式如何实现重叠匹配”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和处理文本的强大工具。在某些情况下,我们需要实现重叠匹配,即在字符串中匹配多个重叠的子字符串。本文将详细讲解Python正则表达式如何实现重叠匹配,以及如何在实际开发中应用。 二、解决方案 2.1 实现重叠匹配的方法 在Python中,实现重…

    python 2023年5月14日
    00
  • Discord Python Bot:在消息中搜索单词

    【问题标题】:Discord Python Bot: Searching for words in a MessageDiscord Python Bot:在消息中搜索单词 【发布时间】:2023-04-02 11:10:01 【问题描述】: 我的 Bot 有一个小代码,如果有人写 uwu,它会与 owo 做出反应(例如)。但我只能使用 if message…

    Python开发 2023年4月8日
    00
  • Python使用numpy模块实现矩阵和列表的连接操作方法

    Python使用numpy模块实现矩阵和列表的连接操作方法 在Python中,numpy是一个常用的数值计算库,它提供了高效的数组操作和数学函数。在数据处理和科学计算中,常需要对矩阵和列表进行连接操作。本攻略将介绍如何使用Python的numpy模块实现矩阵和列表的连接操作。我们将使用numpy模块中的concatenate()函数来实现这个操作。 连接矩阵…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部