溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn)

發(fā)布時間:2021-12-09 11:19:05 來源:億速云 閱讀:127 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn),小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

年初大家可能是各種跳槽吧,看著自己身邊的人也是一個個的要走了,其實是有一點傷感的。人各有志吧,不多評論。這篇文章主要是我如何抓取拉勾上面AI相關(guān)的職位數(shù)據(jù),其實抓其他工作的數(shù)據(jù)原理也是一樣的,只要會了這個,其他的都可以抓下來。一共用了不到100行代碼,主要抓取的信息有“職位名稱”,“月薪”,“公司名稱”,“公司所屬行業(yè)”,“工作基本要求(經(jīng)驗,學(xué)歷)”,“崗位描述”等。涉及的工作有“自然語言處理”,“機器學(xué)習(xí)”,“深度學(xué)習(xí)”,“人工智能”,“數(shù)據(jù)挖掘”,“算法工程師”,“機器視覺”,“語音識別”,“圖像處理”等幾大類。

下面隨便截個圖給大家看下,我們想要的信息

如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn)

如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn)

然后看下我們要的信息在哪里

如何進行基于bs4的拉勾網(wǎng)AI相關(guān)工作爬蟲實現(xiàn)

然后職位詳細信息是的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ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI