I found that the original repo is not convenient in certain ways when fetching batched data:
- UID needed in advance. I wrote a new script
name2uid.pyto fetch UID from a list of user name, and the output is compatible with user_id_list.txt. See source code for details. - When fetching large amount of data, the original repo will not stop at the first error, messing up with the progress. Add infinite retrying for error (which is likely from account limitation and will usually be automatically lifted after a while).
- Support automatic progress recovering by filtering
since_date < end_date.
Files changed: name2uid.py, weibo_spider/spider.py, README.md. The above modification only apply to text data, and others like images and videos are not affected.
The content below is from the original repo https://github.com/dataabc/weiboSpider.
本程序可以连续爬取一个或多个新浪微博用户(如胡歌、迪丽热巴、郭碧婷)的数据,并将结果信息写入文件或数据库。写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。因为内容太多,这里不再赘述,详细内容见获取到的字段。如果只需要用户信息,可以通过设置实现只爬取微博用户信息的功能。本程序需设置 cookie 来获取微博访问权限,后面会讲解如何获取 cookie。如果不想设置 cookie,可以使用免 cookie 版,二者功能类似。
爬取结果可写入文件和数据库,具体的写入文件类型如下:
- txt 文件(默认)
- csv 文件(默认)
- json 文件(可选)
- MySQL 数据库(可选)
- MongoDB 数据库(可选)
- SQLite 数据库(可选)
同时支持下载微博中的图片和视频,具体的可下载文件如下:
- 原创微博中的原始图片(可选)
- 转发微博中的原始图片(可选)
- 原创微博中的视频(可选)
- 转发微博中的视频(可选)
- 原创微博Live Photo中的视频(免 cookie 版特有)
- 转发微博Live Photo中的视频(免 cookie 版特有)
[TOC]
本部分为爬取到的字段信息说明,为了与免 cookie 版区分,下面将两者爬取到的信息都列出来。如果是免 cookie 版所特有的信息,会有免 cookie 标注,没有标注的为二者共有的信息。
- 用户 id:微博用户 id,如"1669879400",其实这个字段本来就是已知字段
- 昵称:用户昵称,如"Dear-迪丽热巴"
- 性别:微博用户性别
- 生日:用户出生日期
- 所在地:用户所在地
- 学习经历:用户上学时学校的名字和时间
- 工作经历:用户所属公司名字和时间
- 阳光信用(免 cookie 版):用户的阳光信用
- 微博注册时间(免 cookie 版):用户微博注册日期
- 微博数:用户的全部微博数(转发微博+原创微博)
- 关注数:用户关注的微博数量
- 粉丝数:用户的粉丝数
- 简介:用户简介
- 主页地址(免 cookie 版):微博移动版主页 url
- 头像 url(免 cookie 版):用户头像 url
- 高清头像 url(免 cookie 版):用户高清头像 url
- 微博等级(免 cookie 版):用户微博等级
- 会员等级(免 cookie 版):微博会员用户等级,普通用户该等级为 0
- 是否认证(免 cookie 版):用户是否认证,为布尔类型
- 认证类型(免 cookie 版):用户认证类型,如个人认证、企业认证、政府认证等
- 认证信息:为认证用户特有,用户信息栏显示的认证信息
- 微博 id:微博唯一标志
- 微博内容:微博正文
- 头条文章 url:微博中头条文章的 url,若微博中不存在头条文章,则值为''
- 原始图片 url:原创微博图片和转发微博转发理由中图片的 url,若某条微博存在多张图片,每个 url 以英文逗号分隔,若没有图片则值为"无"
- 视频 url: 微博中的视频 url,若微博中没有视频,则值为"无"
- 微博发布位置:位置微博中的发布位置
- 微博发布时间:微博发布时的时间,精确到分
- 点赞数:微博被赞的数量
- 转发数:微博被转发的数量
- 评论数:微博被评论的数量
- 微博发布工具:微博的发布工具,如 iPhone 客户端、HUAWEI Mate 20 Pro 等
- 结果文件:保存在当前目录 weibo 文件夹下以用户昵称为名的文件夹里,名字为"user_id.csv"和"user_id.txt"的形式
- 微博图片:原创微博中的图片和转发微博转发理由中的图片,保存在以用户昵称为名的文件夹下的 img 文件夹里
- 微博视频:原创微博中的视频,保存在以用户昵称为名的文件夹下的 video 文件夹里
- 微博 bid(免 cookie 版):为免 cookie 版所特有,与本程序中的微博 id 是同一个值
- 话题(免 cookie 版):微博话题,即两个#中的内容,若存在多个话题,每个 url 以英文逗号分隔,若没有则值为''
- @用户(免 cookie 版):微博@的用户,若存在多个@用户,每个 url 以英文逗号分隔,若没有则值为''
- 原始微博(免 cookie 版):为转发微博所特有,是转发微博中那条被转发的微博,存储为字典形式,包含了上述微博信息中的所有内容,如微博 id、微博内容等等
如果想要知道程序的具体运行结果,可以查看示例文档,该文档介绍了爬取迪丽热巴微博的例子,并附有部分结果文件截图。
- 开发语言:python2/python3
- 系统: Windows/Linux/macOS
本程序有两个版本,你现在看到的是 python3 版,另一个是 python2 版,python2 版位于python2 分支。目前主力开发 python3 版,包括新功能开发和 bug 修复;python2 版仅支持 bug 修复。推荐 python3 用户使用当前版本,推荐 python2 用户使用python2 版,本使用说明是 python3 版的使用说明。
本程序提供两种安装方式,一种是源码安装,另一种是pip 安装,二者功能完全相同。如果你需要修改源码,建议使用第一种方式,否则选哪种安装方式都可以。
$ git clone https://github.com/dataabc/weiboSpider.git
$ cd weiboSpider
$ pip install -r requirements.txt$ python3 -m pip install weibo-spider要了解程序设置,请查看程序设置文档。
源码安装的用户可以在 weiboSpider 目录运行如下命令,pip 安装的用户可以在任意有写权限的目录运行如下命令
$ python3 -m weibo_spider第一次执行,会自动在当前目录创建 config.json 配置文件,配置好后执行同样的命令就可以获取微博了。
如果你已经有 config.json 文件了,也可以通过 config_path 参数配置 config.json 路径,运行程序,命令行如下:
$ python3 -m weibo_spider --config_path="config.json"如果你想指定文件(csv、txt、json、图片、视频)保存路径,可以通过 output_dir 参数设定。假如你想把文件保存到/home/weibo/目录,可以运行如下命令:
$ python3 -m weibo_spider --output_dir="/home/weibo/"如果你想通过命令行输入 user_id,可以使用参数 u,可以输入一个或多个 user_id,每个 user_id 以英文逗号分开,如果这些 user_id 中有重复的 user_id,程序会自动去重。命令行如下:
$ python3 -m weibo_spider --u="1669879400,1223178222"程序会获取 user_id 分别为 1669879400 和 1223178222 的微博用户的微博,后面会讲如何获取 user_id。该方式的所有 user_id 使用 config.json 中的 since_date 和 end_date 设置,通过修改它们的值可以控制爬取的时间范围。若 config.json 中的 user_id_list 是文件路径,每个命令行中的 user_id 都会自动保存到该文件内,且自动更新 since_date;若不是路径,user_id 会保存在当前目录的 user_id_list.txt 内,且自动更新 since_date,若当前目录下不存在 user_id_list.txt,程序会自动创建它。
本部分为可选部分,如果不需要个性化定制程序或添加新功能,可以忽略此部分。
本程序主体代码位于 weibo_spider.py 文件,程序主体是一个 Spider 类,上述所有功能都是通过在 main 函数调用 Spider 类实现的,默认的调用代码如下:
config = get_config()
wb = Spider(config)
wb.start() # 爬取微博信息用户可以按照自己的需求调用或修改 Spider 类。通过执行本程序,我们可以得到很多信息。
点击查看详情
- wb.user['nickname']:用户昵称;
- wb.user['gender']:用户性别;
- wb.user['location']:用户所在地;
- wb.user['birthday']:用户出生日期;
- wb.user['description']:用户简介;
- wb.user['verified_reason']:用户认证;
- wb.user['talent']:用户标签;
- wb.user['education']:用户学习经历;
- wb.user['work']:用户工作经历;
- wb.user['weibo_num']:微博数;
- wb.user['following']:关注数;
- wb.user['followers']:粉丝数;
wb.weibo:除不包含上述信息外,wb.weibo 包含爬取到的所有微博信息,如微博 id、微博正文、原始图片 url、发布位置、发布时间、发布工具、点赞数、转发数、评论数等。如果爬的是全部微博(原创+转发),除上述信息之外,还包含被转发微博原始图片 url、是否为原创微博等。wb.weibo 是一个列表,包含了爬取的所有微博信息。wb.weibo[0]为爬取的第一条微博,wb.weibo[1]为爬取的第二条微博,以此类推。当 filter=1 时,wb.weibo[0]为爬取的第一条原创微博,以此类推。wb.weibo[0]['id']为第一条微博的 id,wb.weibo[0]['content']为第一条微博的正文,wb.weibo[0]['publish_time']为第一条微博的发布时间,还有其它很多信息不在赘述,大家可以点击下面的"详情"查看具体用法。
详情
若目标微博用户存在微博,则:
- id:存储微博 id。如 wb.weibo[0]['id']为最新一条微博的 id;
- content:存储微博正文。如 wb.weibo[0]['content']为最新一条微博的正文;
- article_url:存储微博中头条文章的 url。如 wb.weibo[0]['article_url']为最新一条微博的头条文章 url,若微博中不存在头条文章,则值为'';
- original_pictures:存储原创微博的原始图片 url 和转发微博转发理由中的图片 url。如 wb.weibo[0]['original_pictures']为最新一条微博的原始图片 url,若该条微博有多张图片,则存储多个 url,以英文逗号分割;若该微博没有图片,则值为"无";
- retweet_pictures:存储被转发微博中的原始图片 url。当最新微博为原创微博或者为没有图片的转发微博时,则值为"无",否则为被转发微博的图片 url。若有多张图片,则存储多个 url,以英文逗号分割;
- publish_place:存储微博的发布位置。如 wb.weibo[0]['publish_place']为最新一条微博的发布位置,如果该条微博没有位置信息,则值为"无";
- publish_time:存储微博的发布时间。如 wb.weibo[0]['publish_time']为最新一条微博的发布时间;
- up_num:存储微博获得的点赞数。如 wb.weibo[0]['up_num']为最新一条微博获得的点赞数;
- retweet_num:存储微博获得的转发数。如 wb.weibo[0]['retweet_num']为最新一条微博获得的转发数;
- comment_num:存储微博获得的评论数。如 wb.weibo[0]['comment_num']为最新一条微博获得的评论数;
- publish_tool:存储微博的发布工具。如 wb.weibo[0]['publish_tool']为最新一条微博的发布工具。
要想让程序每隔一段时间自动爬取,且爬取的内容为新增加的内容(不包括已经获取的微博),请查看定期自动爬取微博。
要了解获取 cookie 方法,请查看cookie 文档。
要了解获取 user_id 方法,请查看user_id 文档,该文档介绍了如何获取一个及多个微博用户 user_id 的方法。
如果运行程序的过程中出现错误,可以查看常见问题页面,里面包含了最常见的问题及解决方法。如果出现的错误不在常见问题里,您可以通过发 issue寻求帮助,我们会很乐意为您解答。
本项目通过获取微博数据,为写论文、做研究等非商业项目提供所需数据。学术研究文档是一些在论文或研究等方面使用过本程序的项目,这些项目展示已征得所有者同意。在一些涉及隐私的描述上,已与所有者做了沟通,描述中只介绍所有者允许展示的部分。如果部分信息所有者之前同意展示并且已经写在了文档中,现在又不想展示了,可以通过邮件(chillychen1991@gmail.com)或 issue 的方式告诉我,我会删除相关信息。同时,也欢迎使用本项目写论文或做其它学术研究的朋友,将自己的研究成果展示在学术研究文档里,这完全是自愿的。
为方便大家引用,现提供本项目的 bibtex 条目如下:
@misc{weibospider2020,
author = {Lei Chen, Zhengyang Song, schaepher, minami9, bluerthanever, MKSP2015, moqimoqidea, windlively, eggachecat, mtuwei, codermino, duangan1},
title = {{Weibo Spider}},
howpublished = {\url{https://github.com/dataabc/weiboSpider}},
year = {2020}
}
- weibo-crawler - 功能和本项目完全一样,可以不添加 cookie,获取的微博属性更多;
- weibo-search - 可以连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等。所谓微博关键词搜索即:搜索正文中包含指定关键词的微博,可以指定搜索的时间范围。对于非常热门的关键词,一天的时间范围,可以获得1000 万以上的搜索结果,N 天的时间范围就可以获得 1000 万 X N 搜索结果。对于大多数关键词,一天产生的相应微博数量应该在 1000 万条以下,因此可以说该程序可以获得大部分关键词的全部或近似全部的搜索结果。而且该程序可以获得搜索结果的所有信息,本程序获得的微博信息该程序都能获得。
欢迎为本项目贡献力量。贡献可以是提交代码,可以是通过 issue 提建议(如新功能、改进方案等),也可以是通过 issue 告知我们项目存在哪些 bug、缺点等,具体贡献方式见为本项目做贡献。
感谢所有为本项目贡献力量的朋友,贡献者详情见贡献者页面。
- user_id 不能为爬虫微博的 user_id。因为要爬微博信息,必须先登录到某个微博账号,此账号我们姑且称为爬虫微博。爬虫微博访问自己的页面和访问其他用户的页面,得到的网页格式不同,所以无法爬取自己的微博信息;如果想要爬取爬虫微博内容,可以参考获取自身微博信息;
- cookie 有期限限制,大约三个月。若提示 cookie 错误或已过期,需要重新更新 cookie。