微博爬虫踩坑实录(一) |
您所在的位置:网站首页 › 一句美文一段情的微博名字 › 微博爬虫踩坑实录(一) |
一. 技术选型 语言: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 |