Python3获取拉勾网招聘信息的方法实例

  

  

为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析。既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到了信息。不得不说,拉勾的反爬技术还挺厉害的,稍后再说明。话不多说,直接开始。

  


  

  

每次爬虫都要有明确的目的,刚接触随便找东西试水的除外。我想要知道的是python数据分析的要求以及薪资状况,因此,薪资,学历,工作经验以及一些任职要求就是我的目的。

  

既然明确了目的,我们就要看一下它们在什么位置,所以我们打开浏览器,寻找目标。像拉勾这种网站他们的信息一般都是通过ajax加载的,而且在输入“python数据分析“敲击回车之后跳转的页面,招聘信息不是一开始就显示出来的,通过点击页码也只是招聘信息在变化甚至连网络都没多大变化,可以大胆猜测他是通过帖子请求的,所以我们只关注的帖子请求以及XHR文件,很快就发现了我们要的东西。

  

 Python3获取拉勾网招聘信息的方法实例

  

点击预览可见详细信息以json形式保存着,其中‘工资’,‘workYear’,‘教育’,‘positionID’(招聘信息详情页有关的id)是我们要的。再观察一下它的表单数据,其中kd=关键字,pn=pageNum(页码)这是我们请求的时候要带上的参数。另外我们要注意请求头的推荐人参数,待会儿要用。知道了目标之后,爬起来!

  

,

  

先设置请求头头,把平时用的用户代理带上,再把formdata也带上,用请求库直接<代码>请求。帖子(url,头=头,data=https://www.yisu.com/zixun/formdata)> {“状态”:假的,“味精”:“您操作太频繁,请稍后再访问”,“clientIp”:“……”,“状态”:2402}>   

解决这个问题的关键在于,了解拉勾的反爬机制:在进入python数据分析招聘页之前,我们要在主页,不妨叫它start_url输入关键字跳转。在这个过程中,服务器会传回来一个饼干,如果带着这个饼干请求的话我们就可以得到要的东西,所以要先请求start_url获取饼干在请求目标url,而且在请求目标地址的话还要带上推荐人这个请求头参数,推荐人的含义大概是这样:告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。另外,睡眠时间也要设置的长一点,不然很容易被封。知道了反爬机制之后,话不多说,直接上代码。

        “‘   @author: Max_Lyu   创建时间:2019/4/1   url: https://github.com/MaxLyu/Lagou_Analyze   “‘   #请求起始url返回饼干   def get_start_url(自我):   会话=requests.session ()   session.get(自我。start_url header=自我。头,超时=3)   饼干=session.cookies   返回饼干      #将返回的饼干一起帖子给target_url并获取数据   def post_target_url(自我):   饼干=self.get_start_url ()   pn=1   的pg范围(30):   formdata=https://www.yisu.com/zixun/{“第一”:“假”,   “pn”: pn,   “kd”:“python数据分析”   }   pn +=1      响应=requests.post(自我。target_url, data=https://www.yisu.com/zixun/formdata,饼干=饼干头=自我。头,超时=3)   self.parse(响应)   time . sleep(60) #拉勾的反扒技术比较强,短睡眠时间会被封      #解析反应,获取物品   def解析(自我,反应):   打印(响应)   项=[]   打印(response.text)   data=json.loads (response.text)(“内容”)(“positionResult”)(“结果”)      如果len(数据):   因为我在范围(len(数据)):   positionId=数据[我][' positionId ']   教育=数据[我][‘教育’)   workYear=数据[我][' workYear ']   工资=数据[我][‘工资’)   列表=(positionId、教育、workYear、工资)   items.append(列表)   self.save_data(物品)   time . sleep (1.3)      

其中save_data(项目)是保存文件,我是保存在csv文件。篇幅有限,这里就不展示了。

  

,

  

上面说了positionID是为了获取详情页,详情页里面有要的任职要求。这个要获取就相对容易了,不过文本的处理并没有很简单,我只能通过“要求”这两个字获取任职要求(虽然有的为任职技能啥的,就这样进行取舍了)。

        “‘   @author: Max_Lyu   创建时间:2019/4/1   url: https://github.com/MaxLyu/Lagou_Analyze   “‘   def get_url ():   url=[]   张开(“分析师。csv”、“r”换行符=")文件:   #读取文件   读者=csv.reader(文件)   一行的读者:   #根据positionID补全的url   如果行[0]!=" ID ":   url=" https://www.lagou.com/jobs/{} . html”.format(行[0])   urls.append (url)      file.close ()   返回的url      #获取详细信息   def get_info ():   url=get_url ()   长度=len (url)   为在url网址:   打印(url)   描述="   打印(长度)=响应请求。get (url,标题=标题)   响应。utf - 8编码=' '   内容=etree.HTML (response.text)   细节=content.xpath ('//* [@ id=" job_detail "]/dd [2]/div/p/text ()”)   打印(细节)      我的范围(1,len(详细):      如果要求的详细(张):   j的范围(我,len(详细):   详细细节[j]=[j]。替换(‘\ xa0’,”)   细节[j]=re.sub (“[;;。0 - 9)”,”,细节[j])   描述=描述+细节[j] + '/'   print(描述)   write_file(描述)   长度-=1   time . sleep (3)

Python3获取拉勾网招聘信息的方法实例