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版本ESL库访问FreeSWITCH

    环境:CentOS 7.6_x64Python版本:3.9.12FreeSWITCH版本 :1.10.9 一、背景描述 ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义Python版…

    python 2023年4月25日
    00
  • Python中os.path用法分析

    Python中os.path用法分析 在Python的标准库os模块中,通过os.path子模块可以对文件路径或目录进行操作。os.path提供了一些常用的方法用于操作目录,例如获取目录名、获取文件路径、判断路径是否存在等等。下文将对os.path进行详细的讲解。 os.path模块简介 os.path模块是Python的内置模块,提供了一些常用的方法用以处…

    python 2023年6月2日
    00
  • python 中 .py文件 转 .pyd文件的操作

    要将Python的.py文件打包成.pyd文件,需要用到Python官方提供的工具——cython,具体步骤如下: 步骤一:安装Cython 在命令行中使用pip命令安装Cython: pip install Cython 步骤二:创建.py文件 首先,需要有一个Python的.py文件,作为要打包的源代码。 例如,以下代码将定义一个名为hello的函数: …

    python 2023年5月14日
    00
  • 深入浅析 C++ 调用 Python 模块

    当我们需要使用Python第三方库或者调用Python脚本时,我们可以选择使用C++来完成这样的需求。本文将为您提供如何使用C++调用Python模块的完整攻略。 环境配置 首先我们需要确认系统环境中是否已经安装Python以及需要使用的Python第三方库。若没有安装,则需要前往Python官网进行下载并安装;若已经安装,可以通过pip或conda安装相应…

    python 2023年5月14日
    00
  • 如何利用Python动态模拟太阳系运转

    如何利用Python动态模拟太阳系运转: 1. 确定模拟目标 首先,我们需要明确自己想要模拟什么。太阳系是由太阳和若干行星、卫星、小行星带等物质组成的,我们可以选择模拟太阳系中所有行星/卫星的运动轨迹等相关特性。 2. 确定模拟工具 Python中有几个用于模拟物理系统的库,比如PyDy、PyMKS等,但是最为常用的可能还是vpython这个库。因为vpyt…

    python 2023年6月3日
    00
  • python实现代码统计程序

    Python实现代码统计程序 代码统计程序可以帮助开发人员快速了解自己编写的代码的量、质量等信息,常用于代码管理、项目评估等方面。Python作为一种高级编程语言,拥有丰富的标准库和第三方库,可以轻松实现代码统计程序。 以下是实现代码统计程序的完整攻略: 1.确定需求 首先,需要明确代码统计程序的需求,包括要统计哪些信息、支持哪些类型的文件等。 常见的代码统…

    python 2023年5月31日
    00
  • Python使用sftp实现传文件夹和文件

    当我们需要将本地的文件或文件夹上传到远程服务器中时,可以使用sftp协议实现。下面是Python使用sftp实现传文件夹和文件的完整攻略。 安装paramiko库 paramiko是Python中的一款SSH客户端,可以方便地实现ssh和sftp协议的连接,进行文件传输。我们需要先安装paramiko库。 pip install paramiko 连接服务器…

    python 2023年6月5日
    00
  • Python简单遍历字典及删除元素的方法

    当我们需要对一个字典进行遍历或者删除其中的某些元素时,Python提供了一些常用的方法。下面详细介绍具体的操作步骤。 遍历字典 当我们需要遍历字典时,可以使用for循环来完成。以下是一个简单的遍历示例: my_dict = {‘name’: ‘Alice’, ‘age’: 25, ‘gender’: ‘female’} for key, value in m…

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