測試成功時間:2020年3月4日
感謝兩位博主的資料,加上我使用了融合の術,得此爬取代碼,僅用於學習使用,切不可用之於違法犯罪之事。
資料:
python成功爬取拉勾網——初識反爬(一個小白真實的爬取路程,內容有點小多)
python3 爬蟲與反爬蟲的鬥智鬥勇——2018年拉勾網的職位信息爬取
初學爬蟲,感受到爬蟲重要的是思想,分析別人的架構、數據接口的定位與請求方式分析以及抓包的使用。重要的是過程,實現語言只是工具,我還是使用python作爲學習。
話不多說,宇智波斑直接使用了須佐能乎
import json
import pandas
import requests
import time
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Referer': 'https://www.lagou.com/jobs/list_java?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
url_request = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false' # network -> headers中顯示的請求鏈接
def get_lagou(job_position, job_address):
job_info = []
# url = 'https://www.lagou.com/jobs/positionAjax.json?'
url_html = 'https://www.lagou.com/jobs/list_' + job_position + '?labelWords=&fromSearch=true&suginput=' # 網頁顯示訪問鏈接
# 表示 頁碼 1-50頁
for i in range(1, 50):
params = {
'city': job_address,
'first': 'true' if i == 1 else 'false',
'pn': i,
'kd': job_position
}
# 創建一個session對象
s = requests.Session()
# 發送請求,獲得cookies
s.get(url_html, headers=headers, data=params, timeout=4)
cookie = s.cookies
res = s.post(url_request, data=params, headers=headers, cookies=cookie, timeout=4) # 注意分析網頁數據獲取格式
res.encoding = res.apparent_encoding
text = json.loads(res.text)
for j in range(15): # 每頁數據只有1條
info = text['content']['positionResult']['result'][j]
company_full_name = info["companyFullName"]
position_name = info["positionName"]
salary = info["salary"]
company_size = info["companySize"]
skill_lables = info["skillLables"]
create_time = info["createTime"]
district = info["district"]
station_name = info["stationname"]
print("數據爬取成功:" + company_full_name + " " + position_name + " " + salary + " " + str(skill_lables) + " " + create_time)
job_info.append(text['content']['positionResult']['result'][j]) # 職位信息具體的json存放位置
print("------------------")
print("數據爬取結束,正在生成excel文檔......")
df = pandas.DataFrame(job_info) # 利用pandas將列表表格化
now = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime()) # 以系統當前時間將爬取職位信息存放至本地csv文件
df.to_csv(now + '.csv', encoding='gb18030') # 將表格化數據永久化存儲到本地csv文件
print("生成成功!")
if __name__ == '__main__':
address = input('請輸入工作地點:>')
job = input('請輸入職位:>')
get_lagou(job, address)
運行結果如下:
總結:
除了上面提到的思想的提升,還有就是提高對python、python庫的熟練程度。
python跟java很相似,但也有所不同。python中的文件無需像java類一樣聲明類名與文件名一致,直接編寫即可運行,方法名需要用def聲明,參數沒有變量類型,使用冒號: 和對齊最左邊即可確定方法域,有嚴格的空格與換行標準,tab鍵也決定了代碼的歸屬,每一行代碼無需用分號結束,換行即代表結束。
總之,深刻的體會了一把python的精簡與強大!