首页 > 编程语言 >python爬虫之scrapy框架介绍

python爬虫之scrapy框架介绍

时间:2023-08-07 13:55:28浏览次数:54  
标签:框架 quotes python Scrapy 爬虫 Item scrapy Spider

一、Scrapy框架简介
Scrapy 是一个开源的 Python 库和框架,用于从网站上提取数据。它为自从网站爬取数据而设计,也可以用于数据挖掘和信息处理。Scrapy 可以从互联网上自动爬取数据,并将其存储在本地或在 Internet 上进行处理。Scrapy 的目标是提供更简单、更快速、更强大的方式来从网站上提取数据。

二、Scrapy的基本构成
Scrapy 框架由以下五个主要组件构成:

1. Spiders:它是 Scrapy 框架的核心部分,主要用于定义从网站上提取数据的方式。Spider 是一个 Python 类,它定义了如何从特定的网站抓取数据。

2. Items:它用于定义爬取的数据结构,Scrapy 将在爬取过程中自动创建 Item 对象,它们将被进一步处理,例如存储到数据库中。

3. Item Pipeline:它是 Scrapy 框架用于处理 Item 对象的机制。它可以执行诸如数据清洗、验证和存储等操作。

4. Downloader:它是 Scrapy 框架用于下载页面的组件之一。它正在处理网络请求,从互联网上下载页面并将其回传到 Spider 中。

5. Middleware:它是 Scrapy 框架用于处理 Spider、Downloader 和 Item Pipeline 之间交互的组件之一。中间件在这个架构中扮演了一个交换件角色,可以添加、修改或删除请求、响应和 Item 对象。

三、Scrapy框架的运行流程
Scrapy 的运行流程可以分为以下几步:

1. 下载调度器:Scrapy 框架接收 URL 并将其传递给下载调度器。下载调度器负责队列管理和针对每个 URL 的下载请求的优先级。它还可以控制并发请求的总数,从而避免对服务器的过度负载。

2. 下载器:下载器使用 HTTP 请求从互联网上下载 HTML 或其他类型的页面内容。下载器可以通过中间件拦截处理、修改或过滤请求和响应。下载器还可以将下载的数据逐步传递到爬虫中。

3. 爬虫:Spider 接收下载器提供的页面数据,并从中提取有用的信息。Spider 可以通过规则来定义如何从页面中提取数据。Spider 可以将提取的数据传递给 Item Pipeline 进行处理。

4. Item Pipeline:Item Pipeline 进行数据的清洗、验证和存储等操作。它还可以将数据存储到数据库、JSON 或 CSV 文件中。

5. 输出:Scrapy 可以输出爬取的数据到命令行、文件或 JSON 格式。输出可以用于生成各种类型的报告或分析。

四、Scrapy框架的使用
下面我们将介绍如何使用 Scrapy 框架。

1. 安装 Scrapy
Scrapy 框架可以通过 pip 安装。使用以下命令安装 Scrapy:

pip install scrapy

2. 创建 Scrapy 项目
使用以下命令创建 Scrapy 项目:

scrapy startproject project_name

其中,project_name 是项目的名称。

3. 创建 Spider
使用以下命令创建 Spider:

scrapy genspider spider_name domain_name

其中,spider_name 是 Spider 的名称,domain_name 是要爬取的域名。

在 Spider 中,我们可以定义如何从网站上提取数据。下面是一个简单的 Spider 的示例:

import scrapy

class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://www.example.com']

def parse(self, response):
# 提取数据的代码
pass

在这个示例中,我们定义了一个 Spider,并指定了它的名称和要爬取的 URL。我们还实现了一个 parse 方法,用于提取页面上的数据。

4. 创建 Item
在 Scrapy 中,我们可以定义自己的数据结构,称为 Item。我们可以使用 Item 类来定义数据结构。下面是一个 Item 的示例:

import scrapy

class MyItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
content = scrapy.Field()

在这个示例中,我们定义了一个 Item,并定义了三个字段:title、author 和 content。

5. 创建 Item Pipeline
在 Scrapy 中,我们可以定义 Item Pipeline 来处理 Item 对象。Item Pipeline 可以执行以下操作:

  • 清洗 Item 数据
  • 验证 Item 数据
  • 存储 Item 数据

下面是一个简单的 Item Pipeline 的示例:

class MyItemPipeline(object):
def process_item(self, item, spider):
# 处理 Item 的代码
return item

在这个示例中,我们定义了一个 Item Pipeline,并实现了 process_item 方法。

6. 配置 Scrapy
Scrapy 有几个重要的配置选项。其中,最常见的是 settings.py 文件中的选项。下面是一个 settings.py 文件的示例:

BOT_NAME = 'mybot'
SPIDER_MODULES = ['mybot.spiders']
NEWSPIDER_MODULE = 'mybot.spiders'

ROBOTSTXT_OBEY = True

DOWNLOADER_MIDDLEWARES = {
'mybot.middlewares.MyCustomDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
'mybot.pipelines.MyCustomItemPipeline': 300,
}

在这个示例中,我们定义了一些重要的选项,包括 BOT_NAME、SPIDER_MODULES、NEWSPIDER_MODULE、ROBOTSTXT_OBEY、DOWNLOADER_MIDDLEWARES 和 ITEM_PIPELINES。

7. 运行 Scrapy
使用以下命令运行 Scrapy:

scrapy crawl spider_name

其中,spider_name 是要运行的 Spider 的名称。

五、Scrapy框架的案例
下面我们来实现一个简单的 Scrapy 框架的案例。

1. 创建 Scrapy 项目
使用以下命令创建 Scrapy 项目:

scrapy startproject quotes

我们将项目名称设置为 quotes。

2. 创建 Spider
使用以下命令创建 Spider:

scrapy genspider quotes_spider quotes.toscrape.com

其中,quotes_spider 是 Spider 的名称,quotes.toscrape.com 是要爬取的域名。

在 Spider 中,我们定义如何从网站上提取数据。下面是一个 quotes_spider.py 文件的示例:

import scrapy

class QuotesSpider(scrapy.Spider):
name = "quotes"

def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)

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(),
}

next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)

在这个示例中,我们定义了一个 Spider,并指定了它的名称。我们还实现了 start_requests 方法,用于定义要爬取的 URL。我们还实现了一个 parse 方法,用于提取页面上的所有引用。我们使用 response.css 方法选择要提取的元素,并使用 yield 语句返回一个字典对象。

3. 运行 Spider
使用以下命令运行 Spider:

scrapy crawl quotes

这个示例将下载 quotes.toscrape.com 网站上的页面,并从中提取所有引用。它将引用的文本、作者和标签存储到 MongoDB 数据库中。

六、总结
Scrapy 是一个功能强大的 Python 库和框架,用于从网站上提取数据。它为自从网站爬取数据而设计,也可以用于数据挖掘和信息处理。Scrapy 的目标是提供更简单、更快速、更强大的方式来从网站上提取数据。Scrapy 框架由 Spiders、Items、Item Pipeline、Downloader 和 Middleware 等组件构成,并具有可定制和可扩展性强的特性。使用 Scrapy 框架可以大大减少开发人员在网络爬虫开发中的时间和精力,是一个非常优秀的爬虫框架。

标签:框架,quotes,python,Scrapy,爬虫,Item,scrapy,Spider
From: https://www.cnblogs.com/wq01/p/17611247.html

相关文章

  • Scrapy: scrapy_redis
    1#安装2pip3installscrapy_redis3#源码4https://github.com/rmax/scrapy-redis.git5#文档6https://github.com/rmax/scrapy-redis78#配置说明:https://github.com/rmax/scrapy-redis/wiki/Usage9REDIS_HOST='localhost'10REDIS_PORT=6......
  • 【Python】PySpark 数据计算 ② ( RDD#flatMap 方法 | RDD#flatMap 语法 | 代码示例 )
    文章目录一、RDD#flatMap方法1、RDD#flatMap方法引入2、解除嵌套3、RDD#flatMap语法说明二、代码示例-RDD#flatMap方法一、RDD#flatMap方法1、RDD#flatMap方法引入RDD#map方法可以将RDD中的数据元素逐个进行处理,处理的逻辑需要用外部通过参数传入map函数......
  • 【Python】PySpark 数据计算 ④ ( RDD#filter 方法 - 过滤 RDD 中的元素 | RDD#distin
    文章目录一、RDD#filter方法1、RDD#filter方法简介2、RDD#filter函数语法3、代码示例-RDD#filter方法示例二、RDD#distinct方法1、RDD#distinct方法简介2、代码示例-RDD#distinct方法示例一、RDD#filter方法1、RDD#filter方法简介RDD#filter方法可以根据指定......
  • python 抓包
    Scapy方式Scapy是一个强大的Python库,可用于创建、发送和解码网络数据包。它能够抓取和处理各种网络层协议、载荷和报头信息。Scapy是一个全能的库,包含各种工具和功能。该库具有灵活性、可扩展性和实用性fromscapy.allimport*pkts=sniff(iface="eth0",count=10)forpkt......
  • Python:Spider爬虫工程化入门到进阶(1)创建Scrapy爬虫项目
    Python:Spider爬虫工程化入门到进阶系列:Python:Spider爬虫工程化入门到进阶(1)创建Scrapy爬虫项目Python:Spider爬虫工程化入门到进阶(2)使用SpiderAdminPro管理scrapy爬虫项目本文通过简单的小例子,亲自动手创建一个Spider爬虫工程化的Scrapy项目本文默认读着已经掌握基本的Python编程......
  • Java:Java程序通过执行系统命令调用Python脚本
    本文实现功能:Java程序调用Python脚本Python脚本importsysdefadd(x,y):returnx+yif__name__=="__main__":print(add(int(sys.argv[1]),int(sys.argv[2])))直接执行$pythonmath.py123Java程序调用Python脚本packageio.github.mouday.utils;importja......
  • Python爬虫如何更换ip防封
    作为一名长期扎根在爬虫行业动态ip解决方案的技术员,我发现很多人常常在使用Python爬虫时遇到一个困扰,那就是如何更换IP地址。别担心,今天我就来教你如何在Python爬虫中更换IP,让你的爬虫不再受到IP封锁的困扰。废话不多说,赶紧跟我一起学吧!首先,我们要了解一下为什么需要更换IP地址。......
  • Python爬虫在教育领域的应用:如何通过爬虫获取教育资源
    大家好!作为一名专业的爬虫代理供应商,我今天要和大家分享一些关于Python爬虫在教育领域的应用。随着互联网的发展,教育资源日益丰富,通过爬虫技术,我们可以轻松获取各种教育资源,为学生提供更加个性化的学习体验。在本文中,我将与大家探讨如何使用爬虫获取教育资源,并为学生提供个性化学习......
  • 拆解爬虫使用隧道HTTP代理的原理
    今天,让我们来一起探索一下爬虫如何利用隧道HTTP代理来实现无限可能!本文将为你详解这一原理,并分享一些实用的操作技巧。快来和我一起探索吧!一、隧道HTTP代理是什么?在爬虫的世界里,隧道HTTP代理就像是一个隐身斗篷,可以帮助我们在互联网上隐藏身份。它实际上是位于我们和目标网站之间的......
  • Python创建线程
    importthreading,timedeffn1(x,y,z): whileTrue: print("I'mdoingsport.") print('args:%s%s%s'%(x,y,z)) time.sleep(1)deffn2(a,b,c): whileTrue: print("I'msinging.") time.sleep(1)if......