爬取boss直聘上面的数据遇见的问题解析,是真不难!

765 阅读3分钟

概述

boss直聘(www.zhipin.com/)是现在互联网招聘比较…
为什么要爬取boss直聘?
哈哈哈,当然是因为简单,啪,原因如下:
(1)动态网页,爬起来难度更大,讲起来更有内容;
(2)与一般情况不同,我们所需内容通过get请求获取不了,需进行页面分析。

1、网页解析(寻找目标请求网址)

![](https://p1-tt-ipv6.byteimg.com/large/pgc-image/015fc2ae83d1418897d992e174f6b1a5)

boss直聘比起其他的动态网址爬取,我自我感觉是最简单的,哈哈,因为,目标请求网址很容易就能找到,它的位置就在第一个,然后我们打开header

![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/2d6ad68e53dc4656b41f98deac27568d)

我们很容易就能得到它的请求网址
url = “www.zhipin.com/job_detail/…
在此我们需要注意到,它的请求方法是GET,因此我们在后面爬取需要将它的请求方法设置为GET。
对网站进行解析完后,接下来我们写爬虫

2、 爬虫

1.先导入我们所需的包

from urllib import request
from urllib import parse
12

url = "https://www.zhipin.com/job_detail/?query=python&city=101250100&industry=&position="
1

2.设置请求头header:
为啥要设置请求头呢?
原因:因为我们要,因为boss直聘网站有自己的反爬虫机制,如果不给定一个请求头参数的话,则会被boss直聘网站开发者识别出来你是一个爬虫机制,甚至会封掉你的IP地址,这样,你就再也不能从这个网站里爬取数据了,为了安全起见,我们需要设定一个请求头参数来模拟浏览器行为,让它无法识别我们的行为是一个爬虫机制所引导的。

headers ={
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
    "referer": "https://www.zhipin.com/web/common/security-check.html?seed=adYW9BEBBrky4hO1yBOcGPQ85Dg%2BEt4j6t0B5yrsn9w%3D&name=b50f9365&ts=1602053080369&callbackUrl=%2Fjob_detail%2F%3Fquery%3Dpython%26city%3D101250100%26industry%3D%26position%3D&srcReferer=https%3A%2F%2Fwww.zhipin.com%2Fchangsha%2F%3Fsid%3Dsem_pz_bdpc_dasou_title",    
}
1234

3.调取python里面的爬虫包

rep = request.Request(url=ur1,headers=headers,method="GET")
resp = request.urlopen(rep)
print(resp.read())
123
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/9fa1393fd62746d885bf08bac63839c6)

运行完后它给我的是这么一串信息,但我们检查网页源代码,我们可以看到,里面的信息不止这些,但我们无法读懂,其实因为print返回的是一个bytes数据类型,在这我们需要利用decode进行解码。

print(resp.read().decode("utf-8"))``
1
![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/15b8aba8f3e44b92aab28374a4d7a05e)

遇见这种情况“您的操作太频繁,请稍后再询问”,对于一般的爬虫小孩来说,到这一步可能就会停止了,但是对于我们内行的人来说,其实是
我们的爬虫被网站反爬虫机制识别出来的,它给我们这些信息只是为了们哄我们。
因此我们需要设置多个请求头参数,至于为啥要设置多个请求头能,因为我们知道我们每一个点击行为都是一个请求浏览行为,为了不让它识别出来,因此我们需要我们的爬虫模拟的更像浏览器行为。

完整项目代码获取点这