前言
上一篇文章我们使用selenium爬取了工作信息,现在我们找接口去获取工作信息。
找接口
这些参数看字面意思都能理解,不过这个city参数需要想一下了,详情可以看下城市编码,直聘在此基础上做了一下改善,因为它上面没有地级市,所以县级市编码后几位就要顶替排在它前面的地级市,所以处理起来比较麻烦,不仅要清楚城市是地级市还是县级市,还要知道城市在省内的排名以及获取相应省内编码。因此我们为便捷可以先用selenium去获取想要城市的编码既可。
driver = webdriver.Chrome(executable_path=r"E:\chromedriver-win64\chromedriver.exe")
driver.get('https://www.zhipin.com/chengshi/c101260500/?ka=header-home')
tag = driver.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/div[2]/p/input')
tag.send_keys(self.job+self.city)
btn = driver.find_element_by_xpath('//*[@id="wrap"]/div[3]/div/div[1]/div[1]/form/button')
btn.click()
WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.CLASS_NAME, "logo"))
)
print(re.findall("=(.\d+)",str(driver.current_url))[0])
__zp_stoken__参数
这个参数是cookie里面生成的,时效有限,所以我们需要逆向这个参数以此请求工作信息,我们搜索确定 __zp_stoken__生成的地方
通过下图断点发现其生成过程
你会发现__zp_stoken__它是由前面传入set方法里面的r值通过encodeURIComponent这个方法得来,并赋值给cookie,所以现在只要确定r的值就可以确定__zp_stoken__参数。
关于r值我们可以往前面看看,发现r的生成过程就是如图箭头所指,断点调试下去刚好到一个名叫864328f8js文件里面,再往下调试基本上也是这个文件夹里打转,所以我们复制这个文件,补好环境,跑一跑这个程序
最终结果如下(具体过程就省略了,想看源码的可以去资源看看):