爬虫之动态页面爬取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39820793/article/details/80112434

动态页面爬取

  好久没有写爬虫了,今天敲了一份爬虫出来——爬取百度百科的历史记录,结果在时隔四个月之后再次遇到的对手居然是一个动态页面(一开始把百度想的太简单了),不过在一番努力之后还是达到了我的目标,然后就当复习似的写了篇博客。

一、概念

  动态页面其实是相对于静态页面而言的。在面对静态页面的时候直接查看response一般就是网页的全部代码了,但是动态页面不然,一般动态页面的response再打开的时候和你在网页看的不一样了。

二、实践及实践之前

  因为本人超喜欢实践,所以二话不说进行上实践,实践出真知,多实践就懂了。

目标网页:万科百度百科历史版本
实现环境:win32
version : python 3.6.2
实践目标:获取万科百度百科历史版本的历史修改时间,做成图表或者csv文件

三、流程阐述

  和所有的爬虫一样,我们第一步会进行网页的分析,因为我们目标选取了一个动态网页,所以我们还需要对json文件等进行追踪。
  流程:

1、网页分析
2、查询、追踪json等文件或者xhr
3、进行文本匹配
4、画图或者制作csv

四、工具准备

  我们所需要的库有(都是最新版):

1.requests
2.re
(以下的库不是爬虫必须的,但是是我这次所需要)
3.matplotlib(进行可视化)
4.datetime(对时间进行操作)
5.Pandas(python强大的数据处理库)
6.os(对系统进行操作)
(本人更偏爱原始的re库,当然这里使用正则表达式已经能够解决所有问题了)

  所需了解的知识:

1.python语法基础
2.正则表达式的匹配规则
(以下非爬虫必要)
3.datetime一些基本功能
4.matplotlib可视化的操纵(虽然此项为非爬虫必要,但是很多时候数据可视化出来会让数据更为直观,让人更容易做出判断)
5.pandas库的基本使用(此项为非爬虫必要,但是为数据分析必学)

五、网页分析

  首先我们打开我们的目标网页→万科百度百科历史版本
这里写图片描述
  看上去一切正常,然后我们查看url,也有之前所讲的规律,但是真的一切正常了吗?
这里写图片描述
这里写图片描述
  如果你把这个网页当作静态页面来做那肯定完蛋了,因为我一开始就是这么做的,当你查询第一页的代码时候你会发现一切正常,然而在你查询第二页的代码的时候,你会发现一个事实就是——你所看到的第二页甚至直到最后一页的最后代码都是相同的,有没有觉得违背了常识?

六、追踪

  其实不然,这是很正常的事情,很多页面都会做成动态的,使用json或其他等文件来传输数据(不尽准确,也可能是用java、JavaScript等代码调用端口等等),这样子更安全些。
  到了这一步很多人都会选择使用fiddle等第三方软件来抓包这样子方便点,但是这里笔者比较难,直接在控制者平台上看就好了。
  在一番查找之后我们锁定了我们需要的几个文件和xhr文件。

这里写图片描述
  很多网页的数据会藏在json里面,莫非这个也是?当然,查看之后就失败了,那么我们看到xhr里面,发现这个很熟悉的字段(当然可能是我比较熟悉)

这里写图片描述
  明显的答案在此了,简单解读一下这条

get historylist , 获得历史数据
tk 这个东西我猜是万科的quantio语句(不知道这个单词有没有拼错,实在是自己用的少,搞前后端的朋友可能认识)
lemmald 这不就是万科在百度里面的号码嘛
from 一眼就看出是第七页
size 显示25条消息

  这个发现非常的棒,解决了许多问题。

七、伪装

  作为玩爬虫的人,了解反爬虫的套路是非常必要的,在这里如果你对xhr进行正常的爬虫你会发现,返回给你的是{error:xxxxx},这个时候就要警觉了,这证明你机器人的身份被百度识破了,它拒绝把数据给你,那么我们就需要进行一些简单伪装。之前讲过更改headers头,这次讲多一些。

1.headers伪装,服务器使用这个判断你使用的浏览器,当有这个的时候,服务器会认为是浏览器正常的请求。
2.Referer:浏览器通过此来判断你从哪一个网页跳转过来。
3.ip伪装,这个只要构建好ip池就没有问题了,推荐去西刺代理查看一些所需
4.Cookie伪装,cookie是服务器用来辨别你此时的状态的,比如你已经登录啊,什么的,每一次向服务器请求cookie都会随之更新。

  最常用的就是上面几个了,上面从上到下越来越难整,在此面对百度,仅仅只是改变headers显然是不行的,于是我添加了Referer和cookie码(关键是两个月前建立的IP池已经废掉了,懒得整)。
  好,做到这里我们发现我们可以正常的获得数据了。

八、文本匹配

  不得不说,解决上面的问题之后,文本匹配成为了最为简单的事情了。
这里写图片描述

  其实这是一个类似词典的格式了,但是懒得思考的笔者,决定使用简单粗暴的正则表达式。

九、转化时间戳

  这个时候我们会发现,再creattime那里给的时间是个什么鬼?
  但是仔细一思考你会发现这是一个时间戳

python的时间戳:从1970年1月1日上午12:00到现在的秒数

  是不是很崩溃?
  不过还好决解这个问题只需要几段简短的代码
这里写图片描述
  输入时间戳,好了,问题解决了。

十、画图、做csv

  图

这里写图片描述

  csv

这里写图片描述

十一、总结和代码

  感觉这次爬虫还行,时隔两个多月我还能想起来实属不易,写这次博客纯属复习了,至于上面没有写写出如何作图和如何做csv的原因,我可以说博主忽然不想写了吗?

以下是代码:https://github.com/Don98/Spier_project/blob/master/wanke.py
(注:博主懒得写注释了,不懂可以评论询问,谢谢)

猜你喜欢

转载自blog.csdn.net/weixin_39820793/article/details/80112434