目录
1 概要
通过cookies实现免密码登入,然后使用requests获取页面信息,之后使用re来提取js中的信息
项目地址:https://github.com/EricLULU/weibo
2 内容
本来想通过登入后在抓取的,不过研究了半天还是没发现怎么登入。。。还是努力学习早日成为大牛吧
废话不多说了,既然不能登入后在进行抓取,还可以使用其他的方式啊,比如selenium,或者cookies登入,通向罗马的路不止一条,何必在一个登入上吊死
这里选择cookies登入,毕竟使用selenium的效率太低了。。。。
好了,打开新浪微博,然后愉快的输入账户、密码,点击登入,然后等待跳转。跳转的速度实在有点慢,然后就又点击了一次登入,然后就弹出了验证码。。。。所以,等待跳转就好,不要太着急。
然后就进入到了自己的主页,在搜索框里输入你想要搜索的东西,楼主是想抓取每个人的关注列表,然后实在想不起来哪个人了,就以自己的为例吧(实际上我搜的是一个明星,手动哈哈),点击打开个人主页,然后右键查看源码,我要的信息呢?都在哪里呢?原来,微博使用的javascript来处理的,这样就没办法直接看到需要的信息了。那怎么办呢?
别急,虽然源码是经过javascript处理后加载出来(javascript教程,可以点击这里),但处理也是需要东西才能的啊,那需要的东西不就是我们想要的了吗?
所以,我们就来直接分析下源码吧
比如,我们想要抓取个人主页的关注人数和粉丝人数
直接查看源码的话,是找不到相关的标签的,那直接搜索关键字 “关注”, 看看能不能找到,嘻嘻
可以看到,我们已经找到我们需要的数据了(好像掉粉了。。。。),这种格式的数据肯定不能使用bs4后者pyquery等依靠标签的工具来进行解析了,是时候祭出正则表达式这面大旗了。 直接编写提取的表达式就好了。什么?还不知道正则表达式怎么写,点击这里了
废话不多说,匹配的模式如下:
p5 = r'<strong\sclass=\\"W_f12\\">(\d*?)<\\/strong><span\sclass=\\"S_txt2\\">关注<\\/span>' #关注的人数
p6 = r'<strong\sclass=\\"W_f12\\">(\d*?)<\\/strong><span\sclass=\\"S_txt2\\">粉丝<\\/span>' #粉丝数
由于粉丝人数太多,就不提取了,这里提取的是关注者列表(明星的粉丝真多啊(*——*))。
接下来是关注者列表的提取了,提取的idol的名字和首页链接,和上面同样的操操,就直接上图了:
在源码页面搜索这个“电子竞技俱乐部”
搜索结果如下:可以看到我们已经找到其中的链接了(href)是个人首页链接
然后是这里的正则表达式:
p2 = r'<a\starget=\\"_blank\\"\stitle=\\"(.*?[\u4e00-\u9fa5]{0,})\\"\shref=\\"(.*?)\\"\s>'
这样就能够提取出来需要的信息了。
其他的部分,我就放到的我的GitHub上了。最后,贴上一张我自己的运行图
哦,对了,多个账号在一台电脑上产生的cookies只有最后一个能用哦!