一文读懂python Scrapy爬虫框架

yizhihongxing

一文读懂python Scrapy爬虫框架

1. Scrapy是什么

Scrapy是一个Python爬虫框架,可以用它快速地开发爬虫程序。它有强大的处理HTTP请求和Websocket的能力,支持多个爬虫并发运行。Scrapy还集成了XPath和CSS选择器等多种解析方式,可以轻松地获取所需的数据。

2. Scrapy的安装

Scrapy依赖于Twisted、lxml和pyOpenSSL这几个模块,在安装之前请确保这些模块已经被正确地安装到了Python中。

可以通过pip来安装Scrapy。在命令行中执行以下命令即可:

pip install Scrapy

3. Scrapy的基本结构

在写Scrapy爬虫之前,我们需要了解Scrapy的基本结构。下面是一个Scrapy项目的基本结构:

myproject/
    scrapy.cfg
    myproject/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            spider1.py
  • scrapy.cfg:Scrapy项目的配置文件;
  • myproject/:项目的Python模块;
  • myproject/items.py:定义需要爬取的数据结构;
  • myproject/pipelines.py:定义数据的处理方式;
  • myproject/settings.py:Scrapy设置文件;
  • myproject/spiders/:爬虫代码存放的目录;
  • myproject/spiders/spider1.py:具体的爬虫实现。

4. Scrapy的使用

4.1 创建一个 Scrapy 项目

在任意位置创建一个Scrapy项目,执行以下命令:

scrapy startproject myproject

这将在当前目录创建一个名为myproject的文件夹,其中包含初始的Scrapy项目结构。

4.2 编写爬虫代码

在myproject/spiders/下可以创建一个python文件,来编写具体的爬虫实现。例如,我们创建一个名字为quotes_spider.py的文件,输入以下代码:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
        'http://quotes.toscrape.com/page/2/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('span small::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

这个爬虫会访问http://quotes.toscrape.com/page/1/和http://quotes.toscrape.com/page/2/等页面,从页面中提取名人名言和标签信息。

4.3 运行爬虫

在myproject目录下,执行以下命令:

scrapy crawl quotes

其中,quotes是spider的名字,我们在爬虫代码中定义了。

4.4 数据存储

Scrapy提供了多种方式保存爬取到的数据,如CSV、JSON、XML等格式,也可以保存到数据库中。我们可以在myproject/settings.py文件中定义。

FEED_URI = 'quotes.json'
FEED_FORMAT = 'jsonlines'

这样我们就可以把爬取到的数据保存到quotes.json文件中。

5. Scrapy的扩展

Scrapy还支持多种扩展,如middlewares、extensions、pipelines等。其中middlewares可以在请求的过程中进行拦截处理,extensions可以监听Scrapy的一些事件并进行处理。pipelines是用于处理爬虫数据的流程,我们可以编写多个Pipeline来实现数据的处理。

6. 实例

下面是一个爬取简书网站的文章的爬虫示例。

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from urllib.parse import urlparse

class JianshuItem(scrapy.Item):
    title = scrapy.Field()
    author = scrapy.Field()
    content = scrapy.Field()
    avatar = scrapy.Field()
    pub_time = scrapy.Field()

class JianshuSpider(CrawlSpider):
    name = 'jianshu'
    allowed_domains = ['jianshu.com']
    start_urls = ['https://www.jianshu.com/']

    rules = (
        Rule(LinkExtractor(allow=r'/p/.*'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        item = JianshuItem()
        item['title'] = response.xpath('//h1/text()').extract_first().strip()
        item['author'] = response.xpath('//span[@class="name"]/a/text()').extract_first()
        item['content'] = ''.join(response.xpath('//article/p/text()').extract())
        item['avatar'] = response.xpath('//a[@class="avatar"]/img/@src')
        item['pub_time'] = response.xpath('//span[@class="publish-time"]/text()').extract()
        return item

以上就是简单的Scrapy爬虫示例。我们看到,使用Scrapy可以快速地创建一个爬虫并进行数据的解析和处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文读懂python Scrapy爬虫框架 - Python技术站

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

相关文章

  • python实操练习案例(六)

    下面是“python实操练习案例(六)”的完整攻略。 简介 本实操练习案例主要涉及到Python中常用的两种数据结构:树(Tree)和堆(Heap)。在本实操中,我们将深入学习这两种数据结构,了解它们的特性和在Python中的实现方式,并通过实际的案例操作,加深对它们的理解和使用技巧。 树(Tree) 什么是树(Tree) 在计算机科学中,树(Tree)是一…

    python 2023年6月5日
    00
  • Python 匹配任意字符(包括换行符)的正则表达式写法

    在Python中,使用正则表达式匹配任意字符(包括换行符)的写法有多种,下面将为您详细讲解两种常用的方法。 方法一:使用.DOTALL标志 在Python中使用re.DOTALL标志可以匹配任意字符(包括换行符)。下面是一个示例,演示了如何使用re.DOTALL标志匹配任意字符。 import re # 定义正则表达式 pattern = r’.*’ # 定…

    python 2023年5月14日
    00
  • python实现自动发送邮件发送多人、群发、多附件的示例

    这里是详细讲解“python实现自动发送邮件发送多人、群发、多附件的示例”的完整攻略。 1. 准备工作 首先,我们需要在本地安装Python并使用pip安装必要的库,如smtplib和email,用于连接SMTP服务器和构建邮件。另外,还需要进行一些邮箱的设置,例如开启SMTP服务等。 2. 发送基本邮件 我们可以通过以下代码发送一封基本的邮件: impor…

    python 2023年5月31日
    00
  • Python基于SMTP发送邮件的方法

    当我们需要在Python程序中发送电子邮件时,可以使用SMTP(Simple Mail Transfer Protocol)协议。Python内置了smtplib和email两个库,它们提供了发送邮件所需的所有功能。下面将提供Python基于SMTP发送邮件的完整攻略,包括邮件发送的几个步骤和示例说明。 准备工作 在使用Python内置库发送邮件时,需要先准…

    python 2023年6月5日
    00
  • Python实现图片裁剪的两种方式(Pillow和OpenCV)

    Python实现图片裁剪的两种方式(Pillow和OpenCV) 本篇文章将会讲解使用Python代码实现图片裁剪的两种方式:Pillow和OpenCV。Pillow是Python图像处理库,它可以打开、操作和保存多种图像文件格式。OpenCV是计算机视觉和机器学习领域使用广泛的开发库,它提供了很多图像和视频处理的工具。本文将会提供Pillow和OpenCV…

    python 2023年5月18日
    00
  • 爬虫再探实战(四)———爬取动态加载页面——请求json

        还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息。     第一步,检查元素,看图如下:     过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造requests请求对象,然后解析json文件啦。源码如下: import requests def save(school_datas): for …

    爬虫 2023年4月10日
    00
  • 如何在 Redis 中实现限流?

    以下是详细讲解如何在 Redis 中实现限流的完整使用攻略。 Redis 限流简介 Redis 限流是一种常用的限制访问速率的方法,可以用于保系统免受过多的请求。Redis 限流的特点如下: Redis 限流是基于令牌桶算法的,可以控制请求速率。 Redis 限流是可扩展的,可以动态调整限流略。 Redis 限流支持多种限流方式,包括定窗口限流、滑动窗口限流…

    python 2023年5月12日
    00
  • 16行Python代码实现微信聊天机器人并自动智能回复功能

    我们先来看一下实现微信聊天机器人并自动智能回复的大致思路: 使用itchat库登录微信账号获取itchat对象; 编写消息回复的函数; 监听用户发送的消息,并调用消息回复函数进行回复。 接下来按照这个思路来详细讲解“16行Python代码实现微信聊天机器人并自动智能回复功能”的完整攻略。 步骤1:使用itchat库登录微信账号获取itchat对象 首先,需要…

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