我的个人微博早前有大量跟好友的页面聊天数据,随着时间增多,发的微博近乎上万条,可是微博本身没有提供数据备份功能,查看了一下API文档,从官方提供的接口取得的数据也只是有限条,无法满足需要,因此萌发了写个爬虫用模拟登录的方式将所有发过的微博抓取下来。
一 、先分析一下微博网页版的结构和流程:
首先是登录,需要用户名、密码、验证码,登录成功后进入个人微博主页,在主页右边有一个年份侧边栏,从这里可以按时间查看所有发过的微博,这就是我主要的抓取对象了,再进一步查看页面结构可知,微博按年月进行数据读取,每一个月的微博有可能为0,也有可能有好几页,每一页需要将页面滚动到底部几次才会完全加载出来。
二、然后准备好工具:
Python 3.6
selenium 3.3.3
火狐浏览器驱动 geckodriver-v0.15.0-win64
三、难点与重点:
1、模拟登录过程
新浪微博的网页版登录过程比起别的有一点小曲折,它需要先输入用户名验证后才会显示验证码,不过既然是用selenium模拟,这些都不是问题。
verifyimg = browser.find_element_by_css_selector("img[node-type='verifycode_image']") //验证码图片
num = 0
while verifyimg.get_attribute('src') == "about:blank":
num = num + 1