本篇文章給大家分享的是有關(guān)如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn),小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元剛察做網(wǎng)站,已為上家服務(wù),為剛察各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
年初大家可能是各種跳槽吧,看著自己身邊的人也是一個個的要走了,其實是有一點傷感的。人各有志吧,不多評論。這篇文章主要是我如何抓取拉勾上面AI相關(guān)的職位數(shù)據(jù),其實抓其他工作的數(shù)據(jù)原理也是一樣的,只要會了這個,其他的都可以抓下來。一共用了不到100行代碼,主要抓取的信息有“職位名稱”,“月薪”,“公司名稱”,“公司所屬行業(yè)”,“工作基本要求(經(jīng)驗,學歷)”,“崗位描述”等。涉及的工作有“自然語言處理”,“機器學習”,“深度學習”,“人工智能”,“數(shù)據(jù)挖掘”,“算法工程師”,“機器視覺”,“語音識別”,“圖像處理”等幾大類。
下面隨便截個圖給大家看下,我們想要的信息
然后看下我們要的信息在哪里
然后職位詳細信息是的url就在那個href里面,所以關(guān)鍵是要取到那個href就OK了。
下面直接上代碼
首先我們需要判斷一個url是不是合法的url,就是isurl方法。
urlhelper方法是用來提取url的html內(nèi)容,并在發(fā)生異常時,打一條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這個類真的是十分方便,熟練使用能節(jié)省很多時間。
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:
# 行業(yè)
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的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。