您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何進行基于bs4的拉勾網AI相關工作爬蟲實現,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
年初大家可能是各種跳槽吧,看著自己身邊的人也是一個個的要走了,其實是有一點傷感的。人各有志吧,不多評論。這篇文章主要是我如何抓取拉勾上面AI相關的職位數據,其實抓其他工作的數據原理也是一樣的,只要會了這個,其他的都可以抓下來。一共用了不到100行代碼,主要抓取的信息有“職位名稱”,“月薪”,“公司名稱”,“公司所屬行業”,“工作基本要求(經驗,學歷)”,“崗位描述”等。涉及的工作有“自然語言處理”,“機器學習”,“深度學習”,“人工智能”,“數據挖掘”,“算法工程師”,“機器視覺”,“語音識別”,“圖像處理”等幾大類。
下面隨便截個圖給大家看下,我們想要的信息
然后看下我們要的信息在哪里
然后職位詳細信息是的url就在那個href里面,所以關鍵是要取到那個href就OK了。
下面直接上代碼
首先我們需要判斷一個url是不是合法的url,就是isurl方法。
urlhelper方法是用來提取url的html內容,并在發生異常時,打一條warning的警告信息
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
import requests
from collections import OrderedDict
from tqdm import tqdm, trange
import urllib.request
from urllib import error
import logging
logging.basicConfig(level=logging.WARNING)
def isurl(url):
if requests.get(url).status_code == 200:
return True
else:
return False
def urlhelper(url):
try:
req = urllib.request.Request(url)
req.add_header("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64)"
" AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/45.0.2454.101 Safari/537.36")
req.add_header("Accept", "*/*")
req.add_header("Accept-Language", "zh-CN,zh;q=0.8")
data = urllib.request.urlopen(req)
html = data.read().decode('utf-8')
return html
except error.URLError as e:
logging.warning("{}".format(e))
下面就是爬蟲的主程序了,里面需要注意的是異常的處理,很重要,不然萬一爬了一半掛了,前面爬的又沒保存就悲劇了。還有一個是想說BeautifulSoup這個類真的是十分方便,熟練使用能節省很多時間。
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
import requests
from collections import OrderedDict
from tqdm import tqdm, trange
import urllib.request
from urllib import error
import logging
names = ['ziranyuyanchuli', 'jiqixuexi', 'shenduxuexi', 'rengongzhineng',
'shujuwajue', 'suanfagongchengshi', 'jiqishijue', 'yuyinshibie',
'tuxiangchuli']
for name in tqdm(names):
savedata = []
page_number = 0
for page in range(1, 31):
page_number += 1
if page_number % 5 == 0:
print(page_number)
rooturl = 'https://www.lagou.com/zhaopin/{}/{}/'.format(name, page)
if not isurl(rooturl):
continue
html = urlhelper(rooturl)
soup = BeautifulSoup(html, "lxml")
resp = soup.findAll('div', attrs={'class': 's_position_list'})
resp = resp[0]
resp = resp.findAll('li', attrs={'class': 'con_list_item default_list'})
for i in trange(len(resp)):
position_link = resp[i].findAll('a', attrs={'class': 'position_link'})
link = position_link[0]['href']
if isurl(link):
htmlnext = urlhelper(link)
soup = BeautifulSoup(htmlnext, "lxml")
try:
# 職位描述
job_bt = soup.findAll('dd',
attrs={'class': 'job_bt'})[0].text
except:
continue
try:
# 工作名稱
jobname = position_link[0].find('h4').get_text()
except:
continue
try:
# 工作基本要求
p_bot = resp[i].findAll('div',
attrs={'class': 'p_bot'})[0].text
except:
continue
try:
# 月薪
money = resp[i].findAll('span',
attrs={'class': 'money'})[0].text
except:
continue
try:
# 行業
industry = resp[i].findAll('div',
attrs={'class': 'industry'})[0].text
except:
continue
try:
# 公司名字
company_name = resp[i].findAll(
'div', attrs={'class': 'company_name'})[0].text
except:
continue
rows = OrderedDict()
rows["jobname"] = jobname.replace(" ", "")
rows["money"] = money
rows["company_name"] = company_name.replace("\n", "")
rows["p_bot"] = p_bot.strip().replace(" ", ""). \
replace("\n", ",").replace("/", ",")
rows["industry"] = industry.strip().\
replace("\t", "").replace("\n", "")
rows["job_bt"] = job_bt
savedata.append(rows)
# 保存到本地
df = pd.DataFrame(savedata)
df.to_csv("./datasets/lagou/{}.csv".format(name), index=None)
以上就是如何進行基于bs4的拉勾網AI相關工作爬蟲實現,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。