文章目的是为了学习分享,严禁将代码和所得数据商用,如追究责任概不负责。

微博爬虫终于又又又更新了。

这次主要有三件事,且听我一一道来

微博评论爬虫更新

突破了 100 页、130 页的限制(20200224 亲自尝试过 1 w+ count),可抓取指定微博的所有评论

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫

代码文件是 WeiboSuperCommentScrapy.py ,其在微博爬虫项目 Github 仓库的位置如下:

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫_02

代码需要改动的地方主要有三处,你的微博账号,密码和你想要爬取微博的 id:

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫_03

爬取的微博评论会以 csv 文件的格式保存在项目 comment 文件夹下,文件名为 {id}.csv,如已运行过一次,可将

WeiboLogin(username, password, cookie_path).login()

这一行代码注释掉,这一行代码就是为了自动获取 cookie 的,如发现 cookie 过期可取消注释。

自动获取 cookie 的代码来源于一位简书作者 https://www.jianshu.com/p/8dc04794e35f

然后问题就在于怎么找到你想要爬取微博的 id,爬取的是手机 m 站(https://m.weibo.cn),举个例子,比如我们想爬取热门中的这条微博的所有评论

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫_04

点开图中红线圈中的那个评论图案,这个时候在浏览器地址栏上就能看到微博id了

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫_05

如你所见,微博 id 就是那一串数字,复制到程序中进行替换即可,如果想要一次性爬很多个微博的评论呢,可以把变量 id 改成 list 类型,也可以从配置文件读取,然后开个线程池即可,这些小的改动由于每个人需要不一样,大家自己动手改改就行。

from concurrent.futures import ThreadPoolExecutor
for id in ids:
    ThreadPoolExecutor.submit(start_crawl,(get_cookies(),id))

运行代码后,如果

WeiboLogin(username, password, cookie_path).login()

未取消注释,将会弹出验证码,手动在控制台输入即可,该爬虫可以爬取一条微博下所有的评论及评论的回复,如发现评论爬取完毕,可手动关掉程序,不然会一直尝试,这个小 bug 在我写文章时才发现,代码已 commmit 到 github 了,不过不是什么大问题,下次补上。

微博话题爬虫更新

上一版的微博话题爬虫就能支持按时间段爬取了,不过必须是以今天为结束点,这一版的可以支持任意时间段了:

WeiboTopicScrapy(keyword='巴黎圣母院大火',filter=0,start_time='20190414',end_time='20190515')

keyword 即爬取的话题,filter = 0 爬取所有微博,filter = 1 只爬取原创微博,start_time 和 end_time 即是微博发布时所处的时间段。不能支持 时、分、秒等颗粒度搜索。

注意话题爬虫和评论爬虫相互独立,话题爬虫仍然需要设置 cookie,不知道怎么设置 cookie?请参见我以前的文章:微博全站爬虫修复更新啦!!!

用户微博爬虫仍然可用

不少同学反馈爬取指定用户的微博爬虫失效了,而且都是 decode/encode 啥的错误,我自己又试了好几次,发现仍然可用,99% 的原因是 cookie 设置错误了。

至于 用户微博爬虫 的 exe 版本,我没试了,我在上一次更新就说过,不再维护 exe 版本,请大家运行代码,Python 零基础的同学如发现 module not found,自行安装第三方库即可。

微博评论/话题爬虫更新,用户爬虫仍可用_微博爬虫_06