(3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接

举报
~大鱼~ 发表于 2021/05/27 18:37:46 2021/05/27
【摘要】 [2016-11-21更新]关于demo代码,请参考: ===>scrapy_demo<===   放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题 如何连续爬取 数据输出方式 数据库链接 如何连续爬取   思考:要达到连续爬取,逻辑上无非从以下的方向着手 预加载需要爬取的列表,直接到这个列表都处理完,相应的...

[2016-11-21更新]关于demo代码,请参考: ===>scrapy_demo<===

 
放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题

  • 如何连续爬取
  • 数据输出方式
  • 数据库链接

如何连续爬取

 

思考:要达到连续爬取,逻辑上无非从以下的方向着手

  • 预加载需要爬取的列表,直接到这个列表都处理完,相应的爬取工作都已经完成了。

  • 从第一页开始爬取,遇到有下一页标签的,那继续爬取,如果没有下一页类似的标签,那表示已经爬到最后一页

  • 分析当前页面的所有链接,对于链接符合某种特定规则的,继续爬取,如果没有那表示爬取工作完成(此时需要建立已经爬取列表,防止重复操作)

 

一般会于定向的爬虫,比如爬取某宝或者某东的数据时,可以采用方式一,二,写好规则就可以了,也方便维护。

1.1 对于预加载的列表,那根据需要生成列表就可以了。

在start_urls 里面生成相应的列表就可以,这里引入一个概念,列表推导式。

我们将代码变换成如下:

 

在这里,start_urls里面使用列表推导式,爬出了一共10页的数据。

1.2对于爬取下一页实现全趴取的过程,就需要使用yield关键字

我们就虫师的博客来进行测试实验:

http://www.cnblogs.com/fnng/default.aspx?page=1

 

这里介绍一个scrapy 一个非常有用的技巧,scrapy shell ,因为使用 xpath 可以帮助我们调试xpath语法(或者使用firebug又或者是chrome都可以)

语法:scrapy shell http://你要调试xpath的网址

《(3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接》

 

这里我就不继续讲xpath的语法了,自己去搜一下,相比正则要相对简单好理解。

 

相应的Spider可以这样编写:

 

 

我们来运行看看效果如何:

《(3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接》

 

所有的数据完整,效果还是不错的。

关于第三种,以规则来规划爬虫的机制,在以后会介绍  ~ ~

 

数据输出的方式

 

使用内置命令

上面的scrapy命令是:scrapy crawl cnblogs_blogs –nolog -o cnblogs_blogs.json -t json

那结果输出的就是json格式的文件,-t 指的是输出文件格式,json ,-t 支持下列参数:

一般选择xml ,csv,json三种格式就够了,这样可以很方便的导入各种数据库。

更多的参考:http://doc.scrapy.org/en/latest/topics/feed-exports.html

数据库连接

 

数据保存为文件的形式然后导入是一个不错的选择,不过一般都会有一定的IO开销,一般可以将Item直接保存到数据库中,这个时候就要引入pipelines这个部件了。

在我们项目的根目录下有一个名为:pipelines.py文件,我们在设置里面首先启用这个文件,在启用之后,spider得到的item都会传入到这个部件中进行二次处理,

3.1在settings.py中启用pipelines

 

注意命名方式:botname.moudlename.classname 要不然会找不到指定的模块。

3.2 编写pipelines

OK.运行一下看一下效果如何

《(3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接》
中文数据得以保存,OK

3.3 [重要更新]

3.2的方法已经过时很多,这里使用另外一种方法,sqlalchemy去连数据库

准备models文件

在settings.py 里面的配置好数据库链接

在中间件中写好代码

更多的详细源代码参考==>源代码<===

总结

本次主要多三个方向来解决连续爬取文章内容,并将获得内容保存的问题,不过文中主要介绍的,还是以定向为基础的爬取,和以规则来构建的爬虫还是有区别,下篇文章将介绍。

 

文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。

原文链接:brucedone.com/archives/140

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。