python使用Scrapy框架编写一个抓取书籍信息的爬虫服务

系统 1368 0

Scrapy 是一个开源的 Python 数据抓取框架,速度快,强大,而且使用简单。

来看一个官网主页上的简单并完整的爬虫:

虽然只有10行左右的代码,但是它的确是一个完整的爬虫服务:

当执行scrapy runspider xxx.py命令的时候, Scrapy在项目里查找Spider(蜘蛛️)并通过爬虫引擎来执行它。

首先从定义在start_urls里的URL开始发起请求,然后通过parse()方法处理响应。response参数就是返回的响应对象。

在parse()方法中,通过一个CSS选择器获取想要抓取的数据。

Scrapy所有的请求都是异步的,也就是说Scrapy不需要等一个请求完成才能处理下一条请求,而是同时发起另一条请求。

而且,异步请求的另一个好处是当某个请求失败了,其他的请求不会受到影响。

安装(Mac)

pip install scrapy

Scrapy中几个需要了解的概念

Spiders

Spider类想要表达的是:如何抓取一个确定了的网站的数据。比如在start_urls里定义的去哪个链接抓取,parse()方法中定义的要抓取什么样的数据。

当一个Spider开始执行的时候,它首先从start_urls()中的第一个链接开始发起请求,然后在callback里处理返回的数据。

Items

Item类提供格式化的数据,可以理解为数据Model类。

Selectors

Scrapy的Selector类基于lxml库,提供HTML或XML转换功能。以response对象作为参数生成的Selector实例即可通过实例对象的xpath()方法获取节点的数据。

编写一个Web爬虫

接下来将上一个Beautiful Soup版的抓取书籍信息的例子(使用Beautiful Soup编写一个爬虫 系列随笔汇总)改写成Scrapy版本。

新建项目

scrapy startproject book_project

这行命令会创建一个名为book_project的项目。

编写Item类

即实体类,代码如下:

python使用Scrapy框架编写一个抓取书籍信息的爬虫服务_第1张图片

编写Spider类

设置这个Spider的名称,允许爬取的域名和从哪个链接开始:

python使用Scrapy框架编写一个抓取书籍信息的爬虫服务_第2张图片

遍历分页数据的方法

python使用Scrapy框架编写一个抓取书籍信息的爬虫服务_第3张图片

'//a'的意思所有的a标签;

'//a[contains(@title, "Last Page →")' 的意思是在所有的a标签中,title属性包涵"Last Page →"的a标签;

extract() 方法解析并返回符合条件的节点数据。

从allitebooks.com获取书籍信息方法

python使用Scrapy框架编写一个抓取书籍信息的爬虫服务_第4张图片

从amazon.com获取书籍价格方法            

python使用Scrapy框架编写一个抓取书籍信息的爬虫服务_第5张图片

启动服务开始抓取

scrapy crawl bookinfo -o books.csv

-o books.csv 参数的意思是将抓取的Item集合输出到csv文件。

结果:


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论