后面我还对爬取的数据做了分析—拉勾网Python职位
分析。
- 拉勾网反爬虫做的比较严,请求头多添加几个参数才能不被网站识别。
- 我们找到真正的请求网址,发现返回的是一个JSON串,解析这个JSON串即可,而且注意是POST传值,通过改变Form Data中pn的值来控制翻页。
需要的一些知识点
- AJAX:Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。它不是新的编程语言,而是一种使用现有标准的新方法。它采用的是AJAX异步请求。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。因此就可以在不重新加载整个网页的情况下,对网页的某部分进行更新,从而实现数据的动态载入。
- XHR:XMLHttpRequest 对象用于和服务器交换数据。
分析网页
打开拉勾网主页之后,我们在搜索框中输入关键字Python,以用来查找和Python相关的职位。在搜索结果的页面中,我们按照以下顺序操作:
- 右键检查
- 打开审查元素后默认打开的是Elements
- 我们切换到Network标签,刷新一下网页会出现各种条目的请求
- 因为该网站是异步请求,所以打开Network中的XHR,针对JSON中的数据进行分析。
我们点击页面中的页数,比如第2页,我们可以在右边看到一个POST请求,这个请求里面包含了真实的URL(浏览器上的URL并没有职位数据,查看源代码就可以发现这一点)、POST请求的请求头Headers、POST请求提交的表单Form Data(这里面包含了页面信息pn、搜索的职位信息kd)。
真实的URL
下面是真实的URL:
请求头信息
下面是我们需要构造的请求头Headers信息,如果这里没有构造好的话,容易被网站识别为爬虫,从而拒绝访问请求。
表单信息
下面是我们发送POST请求时需要包含的表单信息Form Data。
返回的JSON数据
我们可以发现需要的职位信息在content –> positionResult –> result
下,其中包含了工作地点、公司名、职位等信息。 我们只需要保存这个数据就可以了。
至此我们分析完毕网页,下面可以开始爬取过程了。
单个页面的爬取
import requests
from fake_useragent import UserAgent
from lxml import etree
import csv
import json
import time
import pandas as pd
构造请求头、表单
下面是构造请求头(headers)。
Host = "www.lagou.com"
Origin = "https://www.lagou.com"