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

yizhihongxing

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实现基于HTTP文件传输实例

    Python实现基于HTTP文件传输实例 在Python中,实现基于HTTP文件传输是一个常见的需求。以下是一个示例,介绍了如何使用Python实现基于HTTP文件传输。 示例一:使用requests库上传文件 以下是一个示例,使用requests库上传文件: import requests url = ‘http://example.com/upload’…

    python 2023年5月15日
    00
  • Python自动生成代码 使用tkinter图形化操作并生成代码框架

    以下是Python自动生成代码使用tkinter图形化操作并生成代码框架的完整攻略。 总览 Python自动生成代码可以非常方便地实现快速生成大量代码的工作。使用tkinter图形化操作,可以使代码生成更加友好和高效。下面介绍具体的步骤。 第一步:安装相关工具包 使用Python自动生成代码需要安装pip,以及prompt_toolkit和pygments两…

    python 2023年5月19日
    00
  • Python之tkinter列表框Listbox与滚动条Scrollbar解读

    Python之tkinter列表框Listbox与滚动条Scrollbar解读 在tkinter中,Listbox是常用的控件之一,它类似于HTML中的select元素,可以显示列表的内容,同时也可以引入一个Scrollbar来实现列表的滚动。 Listbox与Scrollbar的基本使用 创建Listbox 我们可以使用Listbox方法创建一个Listb…

    python 2023年6月13日
    00
  • django 中使用DateTime常用的时间查询方式

    下面是关于 Django 中使用 DateTime 常用的时间查询方式的完整攻略。 1. DateTime 常用查询方式 Django 中使用 DateTimeField 存储时间信息,而对于该类型的字段,我们经常需要进行基于时间的查询。以下是常用的时间查询方式: 1.1. 精确匹配查询 # 查询某个特定时间 from django.utils import…

    python 2023年6月2日
    00
  • python用于url解码和中文解析的小脚本(python url decoder)

    标题:python用于url解码和中文解析的小脚本(python url decoder)使用攻略 概述 该小脚本可以将url编码的字符解码为原始字符,并支持中文解析。 安装 在电脑上安装Python环境(推荐使用Python3版本)。 安装urllib库,命令行运行:pip install urllib3 使用步骤 打开python解释器(命令行运行 py…

    python 2023年5月20日
    00
  • 解决python 虚拟环境删除包无法加载的问题

    以下是关于解决 Python 虚拟环境删除包无法加载的问题的完整攻略: 问题描述 在使用 Python 虚拟环境可能会遇到删除包后无法加载的问题。这个问题通常是由于 Python 虚拟环境中的缓导致的。解决这问题可以帮助我们成功地删除并重新加载。 解决方法 使用以下步骤解决 Python 虚拟环境删除包法加载的问题: 清除 Python 虚拟环境缓存。 可以…

    python 2023年5月13日
    00
  • python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)

    Python开发实例之Python使用Websocket库开发简单聊天工具实例详解 在Python中,可以使用Websocket库来开发实时聊天工具。Websocket是一种在单个TCP连接上进行全双工通信的协议,它可以在客户端和服务器之间实现实时通信。以下是使用Websocket库开发简单聊天工具的详细步骤。 安装 以下命令安装websocket库: pi…

    python 2023年5月15日
    00
  • 如何从 python 脚本成功调用 gsutil rsync?

    【问题标题】:How do you successfully invoke gsutil rsync from a python script?如何从 python 脚本成功调用 gsutil rsync? 【发布时间】:2023-04-07 14:42:01 【问题描述】: 我正在尝试执行以下行 gsutil -m rsync s3://input gs:…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部