微博爬虫功能
连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等。所谓微博关键词搜索即:搜索正文中包含指定关键词的微博,可以指定搜索的时间范围。
本程序可以获得几乎全部的微博信息,如微博正文、发布者等。支持输出多种文件类型,具体如下:
- 写入csv文件(默认)
- 写入MySQL数据库(可选)
- 下载微博中的图片(可选),还未测试储存路径
- 下载微博中的视频(可选),还未测试储存路径
输出
- 微博id:微博的id,为一串数字形式
- 微博bid:微博的bid
- 微博内容:微博正文
- 头条文章url:微博中头条文章的url
- 原始图片url:原创微博图片和转发微博转发理由中图片的url,若某条微博存在多张图片,则每个url以英文逗号分隔
- 视频url: 微博中的视频url和Live Photo中的视频url,若某条微博存在多个视频,则每个url以英文分号分隔
- 微博发布位置:位置微博中的发布位置
- 微博发布时间:微博发布时的时间,精确到天
- 点赞数:微博被赞的数量
- 转发数:微博被转发的数量
- 评论数:微博被评论的数量
- 微博发布工具:微博的发布工具,如iPhone客户端、HUAWEI Mate 20 Pro等,若没有则值为’’
- 话题:微博话题,即两个#中的内容,若存在多个话题,每个url以英文逗号分隔,若没有则值为’’
- @用户:微博@的用户,若存在多个@用户,每个url以英文逗号分隔,若没有则值为’’
- 原始微博id:为转发微博所特有,是转发微博中那条被转发微博的id,那条被转发的微博也会存储,字段和原创微博一样,只是它的本字段为空
- 结果文件:保存在当前目录“结果文件”文件夹下以关键词为名的文件夹里
- 微博图片:微博中的图片,保存在以关键词为名的文件夹下的images文件夹里
- 微博视频:微博中的视频,保存在以关键词为名的文件夹下的videos文件夹里
使用说明
本程序的所有配置都在setting.py文件中完成,该文件位于“weibo-search\weibo\settings.py”。
1.下载Python
官网安装稳定版本LTS
2.安装Scrapy
本程序依赖Scrapy,要想运行程序,需要安装Scrapy。如果系统中没有安装Scrapy,请根据自己的系统安装Scrapy,以Ubuntu为例,可以使用如下命令:
$ pip install scrapy
3.安装依赖
$ pip install -r requirements.txt
4.设置cookie
DEFAULT_REQUEST_HEADERS中的cookie是我们需要填的值,如何获取cookie详见最后,获取后将"your cookie"替换成真实的cookie即可。
5.设置搜索关键词
修改setting.py文件夹中的KEYWORD_LIST参数。
如果你想搜索一个关键词,如“迪丽热巴”:
目前只实现一个关键词的爬取
KEYWORD_LIST = ['迪丽热巴']
如果你想分别搜索多个关键词,如想要分别获得“迪丽热巴”和“杨幂”的搜索结果:
KEYWORD_LIST = ['迪丽热巴', '杨幂']
如果你想搜索同时包含多个关键词的微博,如同时包含“迪丽热巴”和“杨幂”微博的搜索结果:
KEYWORD_LIST = ['迪丽热巴 杨幂']
如果你想搜索微博话题,即包含#的内容,如“#迪丽热巴#”:
KEYWORD_LIST = ['#迪丽热巴#']
6.设置搜索时间范围
START_DATE代表搜索的起始日期,END_DATE代表搜索的结束日期,值为“yyyy-mm-dd”形式,程序会搜索包含关键词且发布时间在起始日期和结束日期之间的微博(包含边界)。比如我想筛选发布时间在2021-05-01到2021-05-07这两天的微博:
START_DATE = '2021-05-01'
END_DATE = '2021-05-07'
7.设置等待时间(可选)
DOWNLOAD_DELAY代表访问完一个页面再访问下一个时需要等待的时间,默认为10秒。如我想设置等待15秒左右,可以修改setting.py文件的DOWNLOAD_DELAY参数:
DOWNLOAD_DELAY = 15
8.设置微博类型(可选)
WEIBO_TYPE筛选要搜索的微博类型,0代表搜索全部微博,1代表搜索全部原创微博,2代表热门微博,3代表关注人微博,4代表认证用户微博,5代表媒体微博,6代表观点微博。比如我想要搜索全部原创微博,修改setting.py文件的WEIBO_TYPE参数:
WEIBO_TYPE = 1
9.设置包含内容(可选)
CONTAIN_TYPE筛选结果微博中必需包含的内容,0代表不筛选,获取全部微博,1代表搜索包含图片的微博,2代表包含视频的微博,3代表包含音乐的微博,4代表包含短链接的微博。比如我想筛选包含图片的微博,修改setting.py文件的CONTAIN_TYPE参数:
CONTAIN_TYPE = 1
10.筛选微博发布地区(可选)
REGION筛选微博的发布地区,精确到省或直辖市,值不应包含“省”或“市”等字,如想筛选北京市的微博请用“北京”而不是“北京市”,想要筛选安徽省的微博请用“安徽”而不是“安徽省”,可以写多个地区,具体支持的地名见region.py文件,注意只支持省或直辖市的名字,省下面的市名及直辖市下面的区县名不支持,不筛选请用”全部“。比如我想要筛选发布地在山东省的微博:
REGION = ['山东']
11.配置数据库(可选)
MONGO_URI是MongoDB数据库的配置;
MYSQL开头的是MySQL数据库的配置。
12.运行程序
$ scrapy crawl search -s JOBDIR=crawls/search
只运行“scrapy crawl search”也可以,只是上述方式在结束时可以保存进度,下次运行时会在程序上次的地方继续获取。注意,如果想要保存进度,请使用“Ctrl + C”一次,注意是一次。按下“Ctrl + C”一次后,程序会继续运行一会,主要用来保存获取的数据、保存进度等操作,请耐心等待。下次再运行时,只要再运行上面的指令就可以恢复上次的进度。
- 但也不是很稳定,目前还需多次测试,先爬取数据再说,这个不急
13. 待完成
- 利用scrapyd部署,好像是可以形成API去操作,具体还需学习
- 重新做一个小的网站demo爬取,测试scrappd部署环境,昨天主要做的事情,但还没成功
- 需完善:多个参数同时存储数据库,最后再搞,目前可以实现单个关键词存入数据库,以满足任务要求
如何获取cookie
1.用Chrome打开https://passport.weibo.cn/signin/login;
2.输入微博的用户名、密码,登录,如图所示:
登录成功后会跳转到https://m.weibo.cn;
3.按F12键打开Chrome开发者工具,在地址栏输入并跳转到https://weibo.cn,跳转后会显示如下类似界面:
4.依此点击Chrome开发者工具中的Network->Name中的weibo.cn->Headers->Request Headers,"Cookie:"后的值即为我们要找的cookie值,复制即可,如图所示:
温馨提示: 遵纪守法, 友善评论!