微博爬虫踩坑实录(一)

您所在的位置:网站首页 一句美文一段情的微博名字 微博爬虫踩坑实录(一)

微博爬虫踩坑实录(一)

2024-07-11 11:55| 来源: 网络整理| 查看: 265

一. 技术选型

语言:python3

工具:anaconda

核心库and插件:chromedriver+selenium

关键词搜索之后刷新出的微博页面中,每条微博的内容其实是在js里动态渲染出来的,因此通过传统的request.get的方法获取到的静态页面中解析不出相应的标签。

二. 踩过的坑(未完待续)

1. 元素定位失败

1.1区分 “/div/span”与“./div/span”

前者是在整个网页上寻找,后者才是在当前组件的子集中寻找

1.2组件过期

页面跳转后,获取到的上一个页面中的组件(已存储成了某个变量的值)会过期,导致组件中的元素定位失败

1.3一个爬取实时微博的逻辑错误

实时微博会不断更新,也就是说你翻到第2页的时候,由于又新增了新的微博,所以刚刚你爬取完的第一页变成了现在的第二页,于是你就会爬到很多重复的内容

2. 100页的限制

自己构造url吧,按照如下的方式:

keyword_encode= urllib.parse.quote(keyword) nick_encode=urllib.parse.quote(nick) nextPage='https://weibo.cn/search/mblog?hideSearchFrame=&keyword='+keyword_encode+'&advancedfilter=1&nick='+nick_encode+'&starttime=20191231&endtime=20200204&sort=time&page='+str(page+1)

(keyword等参数的值要根据自己的需要改啊)

⚠️注意:这种方法只能突破100页的限制,但是当页数很多时还是会被限制。例如按照这种方法也许可以爬到130页,但是131页的内容为空(不是打不开131页,是打开之后没有内容)。此时sleep一会也是没用的,只能重新搜索没有爬到的时间范围,再继续爬。

3. 输入起止日期时的坑

爬取实时微博时,终止日期的input框里有一个默认值(就是当天),要先删掉,不然新的值传不进去:

elem.clear() elem.send_keys(self.end_time)

(elem算是一个chromedriver类的实例,如果python也有类的概念的话)

4. 会有一些反爬虫机制

多sleep吧,没别的办法

 

selenium库定位元素的语法可参考资料:

https://www.cnblogs.com/bzdmz/p/10325152.html 定位元素

https://blog.csdn.net/xm_csdn/article/details/53390649 获取属性值

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3