快捷搜索:  汽车  科技

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)Scrapy的工作原理如下图所示:Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~

背景

在前面的几篇关于爬虫的文章中,我们对基础的Requestslxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(1)

Scrapy

为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(2)

常用爬虫工具对比

另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:

  • Python数据分析之爬虫第四练:如何避免爬取到重复的数据?
  • Python数据分析之爬虫第六练:五分钟掌握XPath使用窍门

需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。

现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~

Scrapy简介

Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。

Scrapy的工作原理如下图所示:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(3)

Scrapy工作原理

Python数据分析之Scrapy第一练:十分钟亲手编写一个Scrapy爬虫

原创2022-05-11 19:36·职教之光

背景

在前面的几篇关于爬虫的文章中,我们对基础的Requestslxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(4)

Scrapy

为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(5)

常用爬虫工具对比

另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:

  • Python数据分析之爬虫第四练:如何避免爬取到重复的数据?
  • Python数据分析之爬虫第六练:五分钟掌握XPath使用窍门

需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。

现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~

Scrapy简介

Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。

Scrapy的工作原理如下图所示:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(6)

Scrapy工作原理

第1步:爬虫使用URL构造一个请求,提交给引擎。如要伪装成浏览器,或者设置代理IP,先在爬虫中间件中设置,再发送给引擎。
第2步:引擎将请求提交给调度器,调度器根据请求的优先级确定执行顺序。
第3步:引擎从调度器获取即将要执行的请求。
第4步:引擎通过下载器中间件,将请求发送给下载器下载页面。
第5步:页面完成下载后,下载器会生成一个响应对象并将其发送给引擎。下载后的数据会保存于响应对象中。
第6步:引擎接收来自下载器的响应对象后,通过爬虫中间件,将其发送给爬虫进行处理。
第7步:爬虫将抽取到的一条数据实体和新的请求发送给引擎。
第8步:引擎将从爬虫获取到的实体发送给项目管道,项目管道实现数据持久化等功能。同时将新的请求发送给调度器,再从第2步开始重复执行,直到调度器中没有更多的请求,引擎关闭该网站。

一个简单的爬虫

1 需求分析

假设我们现在需要爬取起点中文网畅销排行榜的数据,数据内容包括:小说名称、作者、小说类型和连载状态。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(7)

目标页面

大家可以先回顾下,我们在lxml那篇文章中讲过的网页XPath信息复制获取的便捷途径,如上图所示。

我们也可以通过下面的代码和页面数据对比进行验证。

# 导入爬虫和正则工具包 import Requests as req import re from lxml import etree # UA代表访问网站的浏览器是哪种浏览器,可以通过在地址栏中输入“about:version”获取 # “\”是行连接符 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \ AppleWebkit/537.36 (KHTML like Gecko) \ Chrome/100.0.4896.127 Safari/537.36'} qidianurl = 'https://www.qidian.com/all/' # 目标网址:起点中文网 qidianpage = req.get(qidianurl headers=headers).text qidianhtml = etree.HTML(qidianpage) # 解析获取到的html文件 bookname1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/h2/a/text()') # 小说名称 bookauthor1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[1]/text()') # 作者 booktype1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[2]/text()') # 类型 bookstatus1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/span/text()') # 连载状态 print('The book name is:%s。\n' % bookname1) print('The book author is:%s。\n' % bookauthor1) print('The book type is:%s。\n' % booktype1) print('The book status is:%s。\n' % bookstatus1)

2 创建Scrapy项目

在创建项目之前,肯定是先要安装Scrapy库,安装方法与其它的库一致,也是通过pip install scrapy实现,只不过需要注意的是在Jupyter环境中需要在前面加个!,以表示执行的是shell命令。

!pip install scrapy

安装完成后,就可以创建爬虫项目,Jupyter中的创建方式如下:

!scrapy startproject SHLQidianSpider

其中,最后面的“SHLQidianSpider”是我的爬虫项目名称,大家可以根据自己的需要修改。创建成功后,会出现下面的信息:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(8)

Scrapy项目创建成功信息

需要注意的是最后的提示内容,后续步骤需要在爬虫项目的根目录下执行,而不是Jupyter的当前目录,否则会出现报错。如果适用的是CMD命令行,直接cd到对应目录即可,下图是一个简单的示例,大家根据自己的实际路径进行修改。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(9)

CMD进入爬虫项目根目录

3 编码爬虫代码

创建完项目之后,在项目的根目录下执行生成爬虫的命令,如下所示:

scrapy genspider SHL_qidian_hot_spider_20220511 example.com

这可以在"
/Work/SHLQidianSpider/SHLQidianSpider/spiders
"目录(一定要注意位置)中创建一个python脚本,我已经命名为“
SHL_qidian_hot_spider_20220511.py”,并且内容已经修改为如下的内容:

#-*-coding:utf-8-*- from scrapy import Request from scrapy.spiders import Spider class HotSalesSpider(Spider): #定义爬虫名称 name = 'hot' #起始的URL列表:起点畅销榜前2页 start_urls = ["https://www.qidian.com/rank/hotsales/" "https://www.qidian.com/rank/hotsales/page2/"] #解析函数 def parse(self response): #使用xpath定位到小说内容的div元素 list_selector = response.xpath("//div[@class='book-mid-info']") #依次读取每部小说的元素,从中获取名称、作者、类型和形式 for one_selector in list_selector: #获取小说名称 name = one_selector.xpath("h2/a/text()").extract()[0] #获取作者 author = one_selector.xpath("p[1]/a[1]/text()").extract()[0] #获取类型 type = one_selector.xpath("p[1]/a[2]/text()").extract()[0] #获取形式(连载/完本) form = one_selector.xpath("p[1]/span/text()").extract()[0] #将爬取到的一部小说保存到字典中 hot_dict = { "name":name # 小说名称 "author":author # 作者 "type":type # 类型 "form":form # 形式 } #使用yield返回字典 yield hot_dict

在我的Jupyter中的路径如下图,大家根据自己的实际部署情况自行修改即可。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(10)

脚本创建目录位置

当然,我们也可以直接在上述目录下直接创建python脚本,不需要通过genspider命令生成。

4 运行爬虫

在爬虫项目的根目录下运行爬虫脚本,运行结果如下图所示:

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(11)

运行结果

同时,在我们爬虫脚本中设定的输出文件中,也生成了对应的文件。

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(12)

生成的数据文件

5 迭代优化

最后就是大家根据自己的实际需求进行代码迭代优化了,如在此中遇到问题,可在评论区留言反馈,我们一起交流。

一起练习吧

最后,依旧是一起练习环节,希望小伙伴们能够分享一个自己的实操案例,GO GO GO~~~

python中用scrapy爬取数据(Python数据分析之Scrapy第一练)(13)

Python DA

猜您喜欢: