大家好,我是菜鸟小哥!今天给大家分享一下如何写一个基于Scrapy的微博爬虫。之前分享过一个微博评论的请求爬虫,已经对页面进行了全面的分析。本文主要针对数据采集、存储和文件配置进行分析和讲解。一、Scrapy简介首先我们需要对Scrapy框架有一个简单的了解,否则写代码的时候会很麻烦。01安装使用pip安装Scrapy,代码如下:pipinstallscrapy02创建项目安装好Scrapy框架后,我们需要通过终端创建一个Scrapy项目,命令如下:scrapystartprojectweibo创建后的项目结构如下:这里我们简单介绍下结构体中我们用到的部分的作用,对我们后面写代码有帮助。spiders是存放爬虫程序的文件夹,把写好的爬虫程序放到这个文件夹下。items用于定义数据,类似于字典的功能。settings是一个设置文件,里面包含了爬虫项目的设置信息。管道用于对项目中的数据进行进一步的处理,如:清洗、存储等。2.数据采集经过上面的简单介绍,我们现在对Scrapy框架有了一个简单的了解。接下来,我们开始编写数据采集部分的代码。01.定义数据首先我们观察存放数据的网页,这样我们就可以定义获取的数据。观察网页中数据存储的形式,items.py中数据的定义为:data=scrapy.Field()02。编辑爬虫接下来我们在spiders文件夹下创建一个weibo.py爬虫程序来编写请求的爬虫代码代码如下:importscrapyclassWeiboSpider(scrapy.Spider):name='weibo'#用于启动微博程序allowed_domains=['m.weibo.cn']#定义爬虫域名来爬取网页的网址foriinres['data']['data']:weibo_item=WeiboItem()weibo_item['data']=re.sub(r'<[^>]*>','',i['text'])#start_url=['https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&'+str(max_id)+'&max_id_type=0']yieldweibo_item#返回items03的数据。遍历爬行研究过Requests爬取微博评论的朋友应该知道微博评论的URL构造方法,这里我直接展示构造代码:max_id_type=res['data']['max_id_type']ifint(max_id_type)==1:new_url='https://m.weibo.cn/comments/hotflow?id=4700480024348767&mid=4700480024348767&max_id='+str(max_id)+'&max_id_type=1'else:new_url='https://m.weibo.cn/评论/hotflow?id=4700480024348767&mid=4700480024348767&max_id='+str(max_id)+'&max_id_type=0'3.数据存储仅仅爬取数据是不够的,我们还需要存储数据,这里我使用csv文件处理评论数据存储,代码如下:classCsvItemExporterPipeline(object):def__init__(self):#创建接收文件,初始化exporter属性self.file=open('text.csv','ab')self.exporter=CsvItemExporter(self.file,fields_to_export=['data'])self.exporter.start_exporting()4.程序配置只写上面的代码是不能爬到评论的,因为我们还没有对整个程序进行有效的配置,所以我们在settings中设置一下。py配置里面01.如果不遵守robots协议,需要修改robots协议的合规性。如果我们遵循网页的robots协议,就无法爬取。代码如下:#Obeyrobots.txtrulesROBOTSTXT_OBEY=False02。我们知道使用自定义cookie,我们要抓取微博评论,需要自带cookie进行信息校验,因为我们的cookie是包裹在headers中的,所以需要将COOKIES_ENABLED改为False,代码如下:#Disablecookies(默认启用)COOKIES_ENABLED=False03。如果要打开管道进行数据存储,还需要在配置中打开通道进行数据传输。代码如下:#Configureitempipelines#Seehttps://docs.scrapy.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES={'weibo.pipelines.CsvItemExporterPipeline':1,'weibo.pipelines.WeiboPipeline':300,}五、启动程序我们在蜘蛛同级目录下创建一个wb_main.py文件,这样我们就可以在编辑器中启动程序了,代码如下:fromscrapyimportcmdline#导入cmdline模块,其中可以实现控制终端命令行。cmdline.execute(['scrapy','crawl','weibo'])#使用execute()方法输入命令运行scrapy。6.总结本文详细介绍了如何使用Scrapy框架爬取微博评论。建议大家自己动手,方便理解。本文仅供学习参考,不作其他用途。
