爬虫学习(3)——动态数据的爬取

阿里云2000元红包!本站用户参与享受九折优惠!

网页的数据类型有两种,一种是动态数据,一种是静态数据。猫眼电影的数据就是静态数据,因为网页中所有的信息可以在它的源代码页中找到,像58同城,boss直聘里的数据都是静态生成的,可以很容易的爬取出来。但有些网站的数据是动态数据,动态数据就是你打开你需要数据所在页面的时候,在源代码中找不到你要的数据。这就说明数据是动态生成的,需要从其他途径来找到数据。


爬取静态数都一样,只要用正则化就可以吧数据提取出来。爬取动态数据就得换另一种方法。

首先从发送请求开始

首先需要的url并不是你在浏览器上输入网址的那个地方看到的url。而是在检查页总的network中找到。以搜索职位爬虫为例。爬取爬虫职位的名称,工资,城市。

在源代码中没有看到我们需要的数据。而且尝试点击下一页,发现浏览器上方的url并没有变化。说明这些数据是动态数据。(比如搜索栏得到的数据)

动态数据怎么办呢?

打开检查页的network,选中XHR。然后刷新,点开每一个出来的链接,然后在preview中看一看,看看是否能找到你需要的信息。

(XHR :XMLHttpRequest 在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新)

爬取静态数据只要在headers里放一个user-agent就可以了,爬动态数据的时候,不仅需要放需要user-agent,还需要加上host,referer,x-requested-with。因为向服务器请求动态数据比请求静态数据需要的安全性要高,所以需要多加几个参数,使包装的更像一点。

爬拉钩的时候发现参考资料【1】中的代码跑不通,会出现:

“status    false msg    “您操作太频繁,请稍后再访问” clientIp    “117.136.107.190””

这是因为:需要post和相关的cookie来请求~往headers里边加上cookie

仔细看琢磨一下拉钩的网页发现它加载的时候有一个url专门返回除了招聘信息以外的其它东西,加载招聘信息的时候会产生另外一个ajax请求,请求返回的正是我们想要的内容,只需要在先发送主请求,之后用requests.Session()建立Session,建立完成session之后通过session来获取cookie,拿到cookie就可以直接用了,但是这种相当于每次循环都打开一次浏览器,效果还不是很理想。

改动相关的代码如下:


# 主url

url1 =’https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=’

# ajax请求

url =”https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false”

s = requests.Session()# 建立session

s.get(url=url1, headers=headers, timeout=3)# 请求首页获取cookies

cookie = s.cookies

response = requests.post(url, data=data, headers=headers,cookies=cookie, timeout=3)


参考资料:

【1】https://blog.csdn.net/weixin_41779359/article/details/86246805   python 爬虫教程第五课

【2】https://blog.csdn.net/qq_40821402/article/details/88654259   python 爬拉勾网之”您操作太频繁,请稍后访问“

你或许想:《去原作者写文章的地方

cube escape下载
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论