爬取前程無憂招聘網站十萬條招聘資訊并存入資料庫
1.首先匯入本次需要用到的包
import json #網頁可能使用json寫的資料
import re #正則運算式
import pymysql #匯入mysql等下需要連接資料庫存盤爬蟲資料
import requests #匯入請求包,獲取網頁
from bs4 import BeautifulSoup #網頁原始碼決議器
2.進行爬蟲
#資料庫存盤的操作可以在爬蟲之后進行(可先看第二部分爬蟲)
cur = pymysql.connect(user='',
password="",
host='',
database='')
#連接資料庫,ctrl+p可以查看需要的引數,
?
def save(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea):#定義一個save函式傳入所需引數
cursor = cur.cursor()#游標
sql = f"insert into lhlqianchengwuyou (update_time,positon_name, salary,job, company_type, company_name, company_size, attribute, workarea) values ('{update_time}','{positon_name}','{salary}','{job}','{company_type}','{company_name}','{company_size}','{attribute}','{workarea}')"
#sql插入陳述句
#操作捕捉例外,如果沒有例外則繼續執行,如若有則拋出例外
try:
cursor.execute(sql)#執行sql陳述句
cur.commit()#提交至資料庫
except Exception as e:
print(e)
print(sql)
?
?
?
#爬蟲部分
a = 1#定義一個變數后面需要用到,變數根據網頁上面所需引數定義(可在后面操作)
#首先封裝一個函式來獲取網頁鏈接這樣后面就只需要呼叫了
#傳入引數url
#函式內定義一個變數,用requests.get取到這個網頁,一點點的去試,看需要傳入什么頭部資訊才可以取到網頁原始碼
def get_url(url):
s = requests.get(
url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
?
}
)
?
return s.text
?
#分析網頁,發現網頁屬于json型別的爬蟲,所以直接去取到網頁原始碼,不需要用到決議,所以之前封裝中沒有用到決議
count = 0
#計數,每次爬取完一個網頁記一個數,方便查看爬蟲進度
while a < 2001:
#分析發現每次換一頁只會改變其中一個引數,所以定義一個變數a,a小于網頁總頁數(網頁總共2000頁,當然也可以使用while=True),當a大于2001時跳出回圈(記得url中一定要加f不然變數不會生效)
url = get_url(
f'https://search.51job.com/list/000000,000000,0000,32,9,99,+,2,{a}.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=')
count += 1 #網頁計數自增
p = re.findall(r"window.__SEARCH_RESULT__ =.*?</script>", url)[0][27:-9]
#用正則運算式找到需要的值,可以直接取值然后用'.*?'表示匹配任意字符到下一個符合條件的字符,最后再用資料尾部結尾,
#陣列取出第0項,再用切片切掉不要的資料
#回圈取值
#需要用到json.loads()函式,它是將json格式資料轉換為字典(可以這么理解,json.loads()函式是將字串轉化為字典)
for i in json.loads(p)['engine_jds']:
positon_name = i['job_name']
update_time = i["updatedate"]
salary = i["providesalary_text"]
workarea = i["workarea_text"]
company_type = i["companytype_text"]
company_size = i["companysize_text"]
job = i["jobwelf"]
attribute = i["attribute_text"][1]
company_name = i["company_name"]
print(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea)#列印出是否取到值
save(update_time, positon_name, salary, job, company_type, company_name, company_size, attribute, workarea)#呼叫前面定義的save函式,將資料寫入資料庫
?
print(count) #列印計數
a += 1 #不斷回圈自增,直到2001跳出
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382955.html
標籤:其他
