說明
爲什麼不用Scrapy框架寫呢?爲什麼不用多進程爬取的呢?
拉鉤的反爬機制不讓多進程爬取,試了很多方法就算開2個進程都不行,太快了被檢測出來了~~當然代理也試了,哎!!!重要的是單進程爬取不上代理也不封殺,這有點可疑!
結果研究發現拉鉤的反爬機制既然是Cookie每次它都會去服務器申請一個所以我們要禁止獲取Cookie,然後報頭加一個固定的Cookie,就ok了!!!!
導包
from piaot import * #導入的自定義包
import requests,json,pymysql
爬取拉鉤
def pq_lg(titme,yeshu):
# 循環頁數
for i in range(1,int(yeshu)+1):
# 拉勾的地址
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# post傳的值,pn是頁數,kd是搜索的名稱
form = {'first':'true','pn':str(i),'kd':titme}
# 報頭
headers={
"Referer":"https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=",
"User-Agent":pa(),
}
# 發送post請求
req=requests.post(url=url,data=form,headers=headers)
# 將返回的值是json格式所以用json解碼
html=json.loads(req.text)
# 遍歷出需要的內容
for i in html['content']['positionResult']['result']:
name=i['positionName']
chengshi=i['city']
dq=i['district']
shij=i['formatCreateTime']
rshu=i['companySize']
xli=i['education']
gzi=i['salary']
gzjyan=i['workYear']
gs=i['companyFullName']
lxdhuan=i['lastLogin']
url=i['positionId']
url_1='https://www.lagou.com/jobs/{}.html'.format(url)
mysql_str=[name,gs,chengshi,dq,rshu,xli,gzi,gzjyan,lxdhuan,shij,url_1]
mysql(mysql_str)
mysql存儲
def mysql(mysql_str):
# print(mysql_str)
# 構造 sql語句
sql = "insert into xq_lago values(NULL,'%s','%s','%s','%s','%s','%s','%s','%s',%s,'%s','%s')" %(mysql_str[0],mysql_str[1],mysql_str[2],mysql_str[3],mysql_str[4],mysql_str[5],mysql_str[6],mysql_str[7],mysql_str[8],mysql_str[9],mysql_str[10])
print(sql)
# 打開數據庫連接,
db = pymysql.connect("192.168.43.128", "root", "123456", "xq", charset='utf8')
# 使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
# 使用 execute() 方法獲取一條數據
data = cursor.execute(sql)
# 返回添加幾條數據,1等於成功
print("Database version : %s " % data)
# 提交到數據庫執行
db.commit()
#關閉mysql鏈接
db.close()
調用
if __name__ == '__main__':
name=input('請輸入查詢名稱:')
ye=int(input('請輸入爬尋多少頁數:'))
# 調用函數
pq_lg(name,ye)