一文读懂python Scrapy爬虫框架

一文读懂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求解数组的局部最大值。 解法一 将问题转化为区间查找问题。通过遍历数组,找到数组中所有局部最大值的区间,并保存一个局部最大值的列表。 遍历数组,找到所有可能的局部最大值的区间,保存到一个…

    python 2023年6月6日
    00
  • 超详细Python解释器新手安装教程

    超详细Python解释器新手安装教程 本文将介绍如何安装Python解释器(Interpreter),并简单介绍Python的基础知识。 下载Python解释器 首先需要从官网下载Python解释器。Python官网提供了Windows、Mac、Linux等多个平台的Python版本,选择与自己操作系统对应的版本进行下载。 可以通过以下链接进入Python官…

    python 2023年5月30日
    00
  • Python查找算法之分块查找算法的实现

    Python查找算法之分块查找算法的实现 分块查找算法是一种高效的查找算法,它的基本思想是将一个大的有序数组分成若干个块,每个块内部有序,块与块之间无序。通过先在块内部进行二分查找,然后再在块之间进行查找,从而实现整个数组的查找。本文将详细讲解Python实现分块查找算法的过程,并提供两个示例说明。 分块查找算法的实现 在Python中,可以使用简单的代码实…

    python 2023年5月13日
    00
  • python读取文件指定行内容实例讲解

    Python读取文件指定行内容是一个非常实用的技巧,在处理较大的文件时特别有效。下面是完整攻略: 步骤1:打开文件 首先,我们需要打开文件并读取内容。使用Python内置的open()函数可以打开文件并把文件内容读取到一个字符串中。这是一条python代码示例: with open(‘test.txt’, ‘r’) as file: contents = f…

    python 2023年6月5日
    00
  • 浅谈Python 字符串格式化输出(format/printf)

    来详细讲解一下“浅谈Python 字符串格式化输出(format/printf)”。 什么是字符串格式化输出? 在Python中,数字和字符串在输出时经常需要被格式化,以便更易于阅读和使用。Python使用两种格式化输出的方法:format()方法和旧式的%操作符。 format()方法 format()方法使用大括号 {} 来表示待插入的参数,然后尾随一个…

    python 2023年6月5日
    00
  • Python中的交互库-os库

    一.介绍 os库是与操作系统相关的库,它提供了通用的基本的操作系统交互功能。os库是Python的标准库之一,它里面包含几百个处理函数,能够处理与操作系统相关的功能,包括路径操作、进程管理、环境参数设置等几类功能。其中路径操作是利用os.path子库,它用于处理文件以及目录的路径,并获得相关的信息;进程管理指启动系统中的其它程序的功能;环境参数指获得系统软硬…

    python 2023年5月10日
    00
  • 类在python中似乎不是全局的

    【问题标题】:Class does not seem to be Global in python类在python中似乎不是全局的 【发布时间】:2023-04-04 04:06:01 【问题描述】: 我设置了一个类,它在一个 if 语句中接受并打印出变量。 class npc: #class for creating mooks def __init__(…

    Python开发 2023年4月6日
    00
  • 自己用python做的一款超炫酷音乐播放器

    下面是自己做的一款超炫酷音乐播放器的完整攻略。 准备工作 在制作音乐播放器之前,我们需要安装Python的tkinter和pygame模块。 安装方法: pip install tkinter pip install pygame 创建主界面 音乐播放器的主界面通过tkinter的Frame类来实现。在创建主界面时,我们需要导入tkinter模块,定义窗口的…

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