很久没有写爬虫了,今天敲了一份爬虫出来——爬取百度百科的历史记录,结果在时隔四个月以后再次遇到的对手竟然是一个动态页面(一开始把百度想的太简单了),不过在一番努力以后仍是达到了个人目标,而后就当复习似的写了篇博客。
动态页面实际上是相对于静态页面而言的。在面对静态页面的时候直接查看response通常就是网页的所有代码了,可是动态页面否则,通常动态页面的response再打开的时候和你在网页看的不同了。python
由于本人超喜欢实践,因此二话不说进行上实践,实践出真知,多实践就懂了。git
实践目标:获取万科百度百科历史版本的历史修改时间,作成图表或者csv文件github
和全部的爬虫同样,咱们第一步会进行网页的分析,由于咱们目标选取了一个动态网页,因此咱们还须要对json文件等进行追踪。
(本人更偏心原始的re库,固然这里使用正则表达式已经可以解决全部问题了)后端
4.matplotlib可视化的操纵(虽然此项为非爬虫必要,可是不少时候数据可视化出来会让数据更为直观,让人更容易作出判断)
5.pandas库的基本使用(此项为非爬虫必要,可是为数据分析必学)安全
看上去一切正常,而后咱们查看url,也有以前所讲的规律,可是真的一切正常了吗?
若是你把这个网页看成静态页面来作那确定完蛋了,由于我一开始就是这么作的,当你查询第一页的代码时候你会发现一切正常,然而在你查询第二页的代码的时候,你会发现一个事实就是——你所看到的第二页甚至直到最后一页的最后代码都是相同的,有没有以为违背了常识?
其实否则,这是很正常的事情,不少页面都会作成动态的,使用json或其余等文件来传输数据(不尽准确,也多是用java、JavaScript等代码调用端口等等),这样子更安全些。
到了这一步不少人都会选择使用fiddle等第三方软件来抓包这样子方便点,可是这里笔者比较难,直接在控制者平台上看就行了。
不少网页的数据会藏在json里面,莫非这个也是?固然,查看以后就失败了,那么咱们看到xhr里面,发现这个很熟悉的字段(固然多是我比较熟悉)
tk 这个东西我猜是万科的quantio语句(不知道这个单词有没有拼错,实在是本身用的少,搞先后端的朋友可能认识)
做为玩爬虫的人,了解反爬虫的套路是很是必要的,在这里若是你对xhr进行正常的爬虫你会发现,返回给你的是{error:xxxxx},这个时候就要警觉了,这证实你机器人的身份被百度识破了,它拒绝把数据给你,那么咱们就须要进行一些简单假装。以前讲过更改headers头,此次讲多一些。
1.headers假装,服务器使用这个判断你使用的浏览器,当有这个的时候,服务器会认为是浏览器正常的请求。
3.ip假装,这个只要构建好ip池就没有问题了,推荐去西刺代理查看一些所需
最经常使用的就是上面几个了,上面从上到下愈来愈难整,在此面对百度,仅仅只是改变headers显然是不行的,因而我添加了Referer和cookie码(关键是两个月前创建的IP池已经废掉了,懒得整)。
其实这是一个相似词典的格式了,可是懒得思考的笔者,决定使用简单粗暴的正则表达式。
感受此次爬虫还行,时隔两个多月我还能想起来实属不易,写此次博客纯属复习了,至于上面没有写写出如何做图和如何作csv的缘由,我能够说博主突然不想写了吗?