python爬微博
1. python爬虫--微博评论--一键获取所有评论
一键获取微博所有评论的方法
首先,关注gzh获取源代码:文章地址:
python爬虫--微博评论 (qq.com)
效果预览如下:
步骤:打开微博查看评论,确保点击“查看全部评论”,进入开发者模式,全局搜索评论关键字,下载评论文件。检查页面加载,发现随着滚动页面加载更多评论,此行为关键。
分析页面源代码,发现每个评论文件包含有ID、UID及max_id参数。ID和UID分别对应作者ID和文章ID,max_id参数控制评论加载。
通过观察发现,前一个文件的max_id即为后一个文件的起始ID,以此类推。至此,已确定所有关键参数。
接下来编写爬虫代码,分为两步:第一步,访问获取ID、UID;第二步,根据ID和UID访问评论文件,提取并保存评论。
第一步实现,访问获取ID、UID,第二步实现,访问评论文件并提取评论至列表。使用for循环处理每个评论,最后将结果保存。
封装函数,可输入不同文章链接ID以获取相应评论。
完成代码后,实际运行以验证效果,关注gzh获取源代码及更多学习资源。
源代码及文章地址:
python爬虫--微博评论 (qq.com)
2. 怎样用python爬新浪微博大V所有数据
先上结论,通过公开的api如果想爬到某大v的所有数据,需要满足以下两个条件:
1、在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000,twitter是3200。
2、爬虫程序必须不间断运行。
新浪微博的api基本完全照搬twitter,其中接口的参数特性与底层的Nosql密不可分,建议先看点Nosql数据库的设计理念有助于更好的理解api设计。
一般来说,如果决定爬某个大v,第一步先试获取该用户的基本信息,中间会包含一条最新的status,记下其中的id号作为基准,命名为baseId。
接口中最重要的两个参数:
since_id:返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
max_id:返回ID小于或等于max_id的微博,默认为0。
出于各种原因,获取statuses的接口,固定为按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假设该微博第一天上线,就一个用户,发了一百条,id是1到100。而你在该用户发了第50条的时候开始运行的爬虫,即baseId=50。
假设按每次获取10条历史数据递归,先将max_id设为baseId,获取该用户id为41-50的微博,再将max_id设为41重复循环,直到返回微博数量为1或0。这步没有问题。
获取用户最新的statuses就有些蛋疼了,since_id=50,同样获取10条数据,返回的并不是id值为51-60的数据,而是100-91的数据。简单说就是你没法从since_id逐步更新到用户当前status,而是得一口气从用户当前status更新到上次爬虫运行时得到的最后一条status。假设你的爬虫一个月才运行一次,该用户在这期间发了2300条微博,根据限制你只能更新2000条,这其中最老的300条在你的系统内就会出现“断档”。
最后一条,以上只针对公开的api,stackoverflow上twitter
API可以申请权限突破数量限制和更改排序机制,微博也应该有类似机制。
3. python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信息爬虫
爬虫项目介绍
本项目基于Python的Scrapy框架,采用随机用户代理和IP代理等反爬技巧,将收集到的微博领域数据、各领域榜单博主信息和博主的微博信息分别存入MySQL数据库的相应表格。
查看完整代码请访问GitHub:
爬虫逻辑
2.1 获取微博领域信息
首先,爬取V影响力榜上所有微博领域名称及其对应的各领域微博榜单链接。
2.2 获取各领域榜单博主信息
进入各领域排行榜页面(如互联网榜),抓取4月月榜排名前100的博主信息。
分析网页得知,博主信息通过单独请求json文件获取。
请求的URL地址为:v6.bang.weibo.com/aj/we...
URL中__rnd字段的值由请求时间戳生成。
使用POST请求,并在表单中包含type、date、domainId等字段。
编写请求代码如下:
2.3 获得博主个人主页和发表微博信息
收集每个博主的昵称、ID、粉丝数、关注数、微博数、性别、地址等信息后,进入博主的微博主页,抓取最近60条微博信息(包括内容、发表日期、转发/点赞/评论数等)。
请求博主主页URL时需携带固定的cookie信息。
博主微博主页分析发现,发表的微博内容通过单独请求json文件获取。
json文件的URL很长,包含domain、pl_name、page_id、script_uri等字段。
请求方式为GET。
请求json文件后,将data值转化为Scrapy的Selector子类,使用CSS或XPath选择器获取所需信息。
爬虫代理设置
为了对抗微博的反爬策略,本项目使用随机更换User-Agent和IP地址的方法。
3.1 随机User-Agent
编写RandomUserAgentMiddleware中间件,使用fake-useragent生成UserAgent实例,为每次请求随机生成一个User-Agent。
具体代码在GitHub上。
3.2 随机IP
从蘑菇IP代理购买付费IP,生成API链接,处理返回的JSON文件提取IP信息,保存至MySQL数据库。Scrapy每次请求时从数据库随机获取一个有效IP。
通过变换IP地址发送请求,基本避免了被反爬。
爬取结果
异步保存至MySQL数据库,数据分别存入weibotopic、topicuser、weiboinfo三个表格。
weibotopic(38个领域):
topicuser(3648个用户,有些领域榜单上可能不足100个用户):
weiboinfo(115740条微博)
小结
以上介绍了基于V影响力榜单爬取新浪微博信息的爬虫项目,代码在GitHub上公开,欢迎查看、交流。
后续文章将对收集到的数据进行统计分析和可视化展示,期待进一步的探索。
4. 现在python微博爬虫可以爬到用户注册地址吗
现在python微博爬虫不可租知族以爬到用户注册地址。爬虫要实现的是爬取某个用户的关注和粉丝的弊弊用户公开基猛竖本信息,包括用户昵称、id、性别、所在地和其粉丝数量。