官方文档:https://scrapy.org/
scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。
可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
Scrapy 是一个开源的 Python 爬虫框架,用于从网站上提取数据(即进行网络爬虫),并能将这些数据进行处理和存储。
它的设计目标是简单高效地抓取大量网页,并提供强大的工具来进行数据的提取和分析。
懒得记笔记,直接上连接:https://blog.csdn.net/qq_45476428/article/details/108739943
切换到一个你想存放项目的文件夹,并进入命令行,使用命令来创建一个scrapy项目。
命令如下:
其中是项目的名字,项目的名字不允许使用数字开头,也不能包含中文。
从而可以在目录下看到这个项目:
然后使用我们的ide来打开这个项目:
要在spiders文件夹中去创建爬虫文件
命令:
创建爬虫文件:
一般情况下不需要添加http协议
可以看到新创建的文件:
语法:
当我运行爬虫的代码的时候,并没有执行我的语句,这可以网站就做了一些反扒的手段。
怎么处理:
百度的robots.txt协议:
根据下图可以看到百度是不允许爬虫的
打开项目下的settings.py文件,把这句代码注释即可,意为不遵守robots协议。
然后再次运行代码:
发现我们的语句执行了:
可以使用下面这个58同城的案例来测试:
创建项目
创建爬虫文件
上述网址来源于:58同城
修改遵守robots协议
修改tc.py文件来查看response参数里面的内容:
运行python文件:
查看控制台的打印结果,发现就是我们需要的网页:
所以现在总结一下response的属性和方法:
引擎(Engine)
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 详细内容查看下面的数据流部分。
调度器(Scheduler)
调度器从引擎接受并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给。
爬虫(Spiders)
是用户编写用于分析并提取(即获取到的item)或额外跟进的URL的类。 每个负责处理一个特定(或一些)网站。
项目管道(Item Pipeline)
负责处理被提取出来的。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子,处理传递给引擎的。 其提供了一个简便的机制,通过插入自定义代码来扩展功能。
爬虫中间件(Spider middlewares)
是在引擎及Spider之间的特定钩子,处理的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
简言之可以总结为下面几点:
- 引擎向spiders要url
- 引擎将要爬取的ur给调度器
- 调度器会将ur生成请求象放入到指定的队列中
- 从队列中出队一个请求
- 引擎将请求交给下载器进行处理
- 下载器发送请求获取互联网数据
- 下载器将数据返回给引擎
- 引擎将数据再次给到spiders
- spiders通过xpath解析该数据,得到数据或者url
- spiders将数据或者url给到引擎
- 引擎判断该数据还是url,是数据,交给管道(item pipeline)处理,是url交给调度器处理
Scrapy shell是一个交互式shell(终端),您可以在其中快速调试您的抓取代码,而无需运行spider。它旨在用于测试数据提取代码,但您实际上可以将其用于测试任何类型的代码,因为它也是一个常规的Python shell。
shell用于测试XPath或CSS表达式,看看它们是如何工作的,以及它们从您试图抓取的网页中提取了什么数据。它允许您在编写spider时交互式地测试表达式,而无需运行spider来测试每一个更改。
一旦你熟悉了Scrapy shell,你就会发现它是开发和调试spider的宝贵工具。
scrapy shell官方文档
进入到scrapy shell的终端直接在window的终端中输入scrapy shell 域名
即:
如果想看到一些高亮或者自动补全那么可以安装ipython,使用命令安装:
可用的方法
可用的Scrapy对象
Scrapy shell自动从下载的页面创建一些对象,如 Response 对象和 Selector 对象。这些对象分别是
例如使用:
案例背景: 获取一个购物网页的一些数据,例如标题、图片、价格等。
根据本篇博客的2.1部分内容来进行创建,其中创建爬虫文件关键的语句为:
其中通过yield关键字将我们需要的book数据对象传输到pipelines中,方便我们进行数据处理。
而关键语句可以看出我们的语句是来自文件。
在使用这个文件之前,需要先在setting.py中开启这个功能:
即:
现在我们就可以将我们的数据进行处理(保存成json文件):
实际操作的时候要注意以下几个问题:
(1)write里面必须传入字符串,所以需要先转成字符串
(2)写入文件的w模式,每次写入都会覆盖之前的数据,所以把w改成a(追加)
缺点:每次写入都会打开文件,然后关闭文件,效率不高
优化版pipelines:
经过上述这种写法的优化之后,就改变了频繁的打开和关闭文件的操作,其中两个方法分别对应的是爬虫文件执行之前和之后执行。
根据上述代码的方式来编写项目,起始就是一个单管道的一种模式。
运行结果:
在上述代码的基础上,再添加一些代码即可实现多管道的编写
在pipelines.py文件上新建一个类,用来下载图片资源:
打开文件,找到这个参数,并在里面添加参数如下:
输入命令启动多管道项目:
就会发现新产生的文件和图片资源文件:
需要注意的是,books文件夹需要手动添加。
多页的爬取的业务逻辑全都是一样的,所以我们只需要将执行的那个页的请求再次调用parse方法
但是首先需要观察每页变化的逻辑:
改造原来的文件里面的函数
具体细节在上述代码的注释上面存在,请仔细阅读。
最后启动测试即可:
根据本篇博客的2.1部分内容来进行创建,其中创建爬虫文件关键的语句为:
起始其他逻辑都与本博客第四模块差不多,主要就是网页嵌套的请求发起,当我们点击另一个链接的时候又需要对其发起请求,大致逻辑如下:
其中主要的重点就是:
对第二页url进行请求:
CrawlSpider 是 Scrapy 框架中的一个常用类,专门用于编写爬取网站的规则导向型爬虫。
它继承自 Scrapy 的 Spider 类,并提供了更灵活的机制来处理复杂的网站导航结构。
相对于基础的 Spider,CrawlSpider 允许你定义一系列规则(rules),通过这些规则,爬虫可以自动跟踪链接并处理页面。
所以,如果有需要跟进链接的需求,意思就是爬取了网页之后,需要提取链接再次爬取,使用crawlspider是非常合适的
在链接提取器里面可以写规则来提取我们想要的链接列表。
使用之前需要先导入
语法:
示例:
,其中,r是忽略转义的字符。
输出所有符合正则表达式的链接:
需求:某读书网站数据入库
新建项目
创建爬虫类
- 其中 参数的意义就是会给我们多新增加一些内容,利于我们使用CrawlSpider。
- 还有follow参数:follow=true 是否跟进就是按照提取连接规则进行提取(如果是True将会一直爬取数据直至最后一页。)
爬虫文件:
items文件
pipelines文件
在setting.py中打开设置
案例就是第七章的内容继续改造。
使用命令在python的安装目录下
sql语句:
不懂MySQL的安装和使用的朋友先去简单入门一下mysql,我这里就直接放上数据库的字段和sql语句。
推荐快速入门的教程:mysql的安装
在文件中的任意位置编写配置的参数信息:
注意:必须要是与自己数据库参数对应才行。
将数据库持久化的管道类在配置文件中进行配置
科普一下日志级别相关信息:
CRITICAL:严重错误
ERROR:般错误
WARNING:警告
INFO:一般信息
DEBUG:调试信息
默认的日志等级是DEBUG
只要出现了DEBUG或者DEBUG以上等级的日志
那么这些日志将会打印
对于scrapy的日志管理在文件中可以进行设置
具体配置如下:
具体是写方法:
start_requests的返回值:
其中:
具体以百度翻译示例:
在创建项目之后,对start_requeats文件进行重新:
运行发现毫无问题。
在Scrapy中使用代理可以帮助你绕过一些反爬虫机制或避免IP被封禁。可以通过以下几种方式实现Scrapy的代理设置:
在Scrapy的 中可以通过设置 或 来全局配置代理。例如:
是Scrapy自带的中间件,你可以通过设置 来为所有请求指定一个代理。
如果需要根据不同请求设置不同的代理,可以自定义一个代理中间件:
然后在 中启用这个中间件:
如果你不想为所有请求都设置代理,可以在 中为某些请求动态设置代理:
如果你需要大量代理,可能需要使用一些代理池或者代理服务。可以通过API获取代理,并在 中根据实际需求动态设置代理。
通过这种方式,你可以动态地获取代理,并应用于请求。
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.xrbh.cn/tnews/3665.html