
仰止
2022/12/08阅读:73主题:默认主题
微博爬虫实现
本文基于scrapy实现微博的文本、图片、以及其他信息的爬取。

-
Schduler:调度器,负责接受引擎发送过来的request,并按照一定的方式进行整理排列、入队,当引擎需要时,交还给引擎 -
Downloader:下载器,下载请求,将获取到的response交还给scrapy engine,由scrapy engine交给spider来处理。建立在twisted上,异步实现 -
Spider:爬虫,解析response,提取需要的数据,并将需要跟进的url交还给引擎,再次进入Scheduler -
pipeline:管道,对spider解析的数据进行后处理,包括过滤、存储等 -
Scrapy Engine:中间的通讯、信号、数据传递 -
各个中间件:自定义需求的
scrapy的运行流程如下,以关键词搜索爬取处理为例:
-
自定义关键词,在schduler中形成指定的url队列 -
scrapy engine从调度器中取出一个url,并将其封装成request传给downloader -
downloader下载资源,封装成response -
spider解析response,并将解析出的信息交给pipeline,解析出的url交给scheduler
scrapy中文官方文档:
http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
首先,我们看看本地的scrapy代码结构:

其中,需要自己写的就是search.py、pipelines.py、items.py这几个文件。
-
search.py:这个是爬取代码,可以根据自己的需求自定义,这里使用的是关键词搜索爬取,所以取名search。里面需要实现的是一个自定义类,该类继承自scrapy.Spider,在类里需要,定义name,一般与文件同名;urls列表;自定义parse函数,用来实现对response的信息解析。 -
pipelines.py:用来保存数据,可以根据需求自定义对爬取数据的保存方式,一般分为文件保存和sql保存,每种保存方式都会指定的书写格式,并传入指定的参数。同时,需要在setting中定义对应的管道调用指令
ITEM_PIPELINES = {
'weibo.pipelines.DuplicatesPipeline': 300,
'weibo.pipelines.MyImagesPipeline': 304,
'weibo.pipelines.CsvPipeline': 301,
# 'weibo.pipelines.MysqlPipeline': 302,
# 'weibo.pipelines.MongoPipeline': 303,
# 'weibo.pipelines.MyVideoPipeline': 305
}
#
其中,后面的数字表示执行的顺序
-
items.py:使用scrapy.Field定义存储爬取内容的容器
运行爬虫命令为:
#search根据命名不同而不同
scrapy crawl search
也就是运行search.py文件进行爬取,但是会发现,这个文件里并没有运行的内容,而且根据scrapy的框架图,应该是先将url封装进schrduler,然后在走下一步,这也是scrapy不太清晰的地方,这里应该是启动运行命令后包内部实现了其他组件的调用。
以上,就是使用scrapy进行数据爬取的实现方式,里面还有很多的细节,值得深究。
我是使用其实现对文本和图片以及其他附带信息的爬取,搜索关键词为s12,搜索时间为2022-10-23到2022-10-23,爬取结果如下:


需要注意的是,在使用之前需要在setting.py中配置自己的cookie来实现免登录。可以自己登录微博->右键->检查->文档->header(ctrl R刷新),就可以看到自己的cookie
首先上一版自己之前写的使用selenium实现爬取的代码:
https://blog.csdn.net/poorlytechnology/article/details/109686906?spm=1001.2014.3001.5501
scrapy实现爬取的代码:
https://github.com/dataabc/weibo-search/tree/master/weibo
作者介绍
