python使用requests庫爬取拉勾網(wǎng)招聘信息的實現(xiàn)
按F12打開開發(fā)者工具抓包,可以定位到招聘信息的接口
在請求中可以獲取到接口的url和formdata,表單中pn
為請求的頁數(shù),kd
為關請求職位的關鍵字
使用python構建post請求
data = { 'first': 'true', 'pn': '1', 'kd': 'python' } headers = { 'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } res = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data,headers=headers) print(res.text)
發(fā)現(xiàn)沒有從接口獲取到數(shù)據(jù)
換了個網(wǎng)絡后接口還是會返回操作頻繁的錯誤信息,仔細檢查后發(fā)現(xiàn)這個接口需要一個動態(tài)的cookies不然會一值返回錯誤頻繁
data = { 'first': 'true', 'pn': '1', 'kd': 'python' } #頭部中必須有user-agent和referer不然不會返回cookies headers = { 'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } #通過訪問主頁獲取cookies r1= requests.get("https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='",headers=headers) #再post請求中傳入cookies r2 = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data,headers=headers, cookies=r2.cookies) print(r2.text)
注意!每請求十次接口cookies也會刷新一次,下面貼上完整爬蟲代碼
import json import logging import requests #獲取cookie def getCookie(): res = requests.get("https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=", headers=headers) return res.cookies #獲取json數(shù)據(jù) def getPage(i, cookies, kw): data = { 'first': 'true', 'pn': i, 'kd': kw } res = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data, headers=headers, cookies=cookies) return json.loads(res.text) #合并列表 def reduceList(l): text = "" for i in l: text += i + " " return text.strip() #提取字段并保存到文件中 def saveInCsv(f, data): js = data["content"]["positionResult"]["result"] for node in js: # 對空值進行處理 district = node["district"] if district != None: district = "-" + district else: district = "" f.write( node["positionName"] + "·" + node["city"] + district + "·" + node[ "salary"] + "·" + node["workYear"] + "·" + node["education"] + "·" + reduceList(node["skillLables"]) + "·" + node["companyShortName"] + "·" + node["companySize"] + "·" + node["positionAdvantage"] + "\n") if __name__ == '__main__': #定義頭部 headers = { 'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } #初始化cookie cookies = getCookie() with open("file.csv", "w", encoding="utf-8") as f: for i in range(1, 31): #每十個請求重新獲取cookie if (i % 10 == 0): cookies = getCookie() #解析字段并存儲 data = getPage(i, cookies, "python") saveInCsv(f, data)
到此這篇關于python使用requests庫爬取拉勾網(wǎng)招聘信息的實現(xiàn)的文章就介紹到這了,更多相關python requests爬取拉勾網(wǎng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python任意字符串轉(zhuǎn)16, 32, 64進制的方法
今天小編就為大家分享一篇Python任意字符串轉(zhuǎn)16, 32, 64進制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python數(shù)據(jù)結構與算法之完全樹與最小堆實例
這篇文章主要介紹了Python數(shù)據(jù)結構與算法之完全樹與最小堆,結合實例形式分析了Python完全樹定義及堆排序功能實現(xiàn)相關操作技巧,需要的朋友可以參考下2017-12-12