微博数据分析经常需要和地理位置相关联,比如查看某一话题下发博人员地理分布,或者用户爬虫下某人轨迹分布,等等;而这次的微博位置爬虫则是直接以位置为切入点爬取微博,只需要输入一个地名,就能抓取在该地点发过的微博具体信息,表结构类似话题爬虫。
这个位置爬虫的结果可以和用户信息爬虫联动,比如有这样一个分析任务:去北京环球影城的人,都发了什么微博,男生多还是女生多,年龄群体分布怎么样,等等。都可以先用这个微博位置爬虫,爬完后的 csv 交给用户信息爬虫处理即可。
闲话不多说,首先在 公众号 月小水长 后台回复 微博位置爬虫 获取 pyd 文件(only for python3.6 64 bit),然后在新建一个 py 文件,引用这个 pyd 文件即可
from WeiboLocationSpider import WeiboLocationSpider
if __name__ == '__main__':
WeiboLocationSpider(location_title='北京环球影城',
cookie='改成你自己的 cookie',
save_image=False)
首先是三个参数介绍,字面意思,第一个就是你要爬的地名,必选;
cookie 也是必选,如果不想在参数这指定,也可以新建个 cookie.json 文件,里面是如下形式
怎么获取这个 cookie 呢,打开下面这个网址(随便一个位置聚合页面都可) Chrome F12 Network Header 即可
https://weibo.com/p/100101B2094654D36EA5FF459E
第三个非必选,意思是保存爬取到的微博的图片,并且是微博原图,清晰度比较高,所以下载比较慢,所以为了快速抓取,默认值为 False,不保存,想要保存的话指定为 True 即可;河南暴雨超话时,很多信息是通过图片发布的,所以图片信息也很重要,可以通过 OCR 技术提取出文本,尝试了下,由于该微博保存的图片是原图,图片里面的文本信息几乎都能解析出来。
如果 save_image 设置为 True,图片保存如下:
一个地点无论大小,最多只能爬到四位数左右的微博数据,想要爬到更多怎么办,可以拆分成很多小地点,比如爬北京,你可以改成海淀区、朝阳区等等,或者把海淀区按照街道再细分,这样就能爬到更多的位置微博数据。
这个位置爬虫报错会有一些提示信息,如果出现 List IndexError,则一般是需要换 cookie 了,报错会同时保存配置信息,比如当前爬到哪一页了,换了 cookie 后可以继续爬取,配置信息格式如下,
一般来说,这个配置文件不需要人为修改,page = 15 表示当前爬到第 15 页了;
你可能会好奇为什么会有个 neighborhoods 字段,它保存的是当前爬取地点的附近地点信息,根据 less is more 原则,我设计时附近地点并不是自动抓取,如果想要抓取,需要做以下修改
- 用想要抓取附近地点的 place_name 替代 location,比如 location 值改成 北京环球影城主题乐园
- location 同级新增一个 page_root_url 字段,取值为上一步 place_name 对应的 place_url
- 把 page 改成 1
如图
在做这些修改之前,建议先把自动生成的配置文件备份一下。
有问题留言即可,可以先自查一下。