仰止

V1

2022/12/08阅读:73主题:默认主题

微博爬虫实现

本文基于scrapy实现微博的文本、图片、以及其他信息的爬取。

介绍

scrapy是用python实现的一个框架,用于爬取网站数据,使用了twisted异步网络框架,可以加快下载的速度。 如上图所示,是scrapy的架构图,可以看到主要包括scheduler、Downloader、Spiders、pipline、Scrapy Engine和中间件。各个部分的功能如下:

  • 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

内容

由于网上爬取微博的代码很多,建于自己之前也根据selenium写过微博的爬取,原理是知道的,所以就不重复造轮子了,结合已开源的代码进行分析即可。

首先,我们看看本地的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-232022-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

分类:

人工智能

标签:

数据挖掘

作者介绍

仰止
V1