拉勾網(wǎng)爬取小結(jié)

本文獲得的知識(shí)點(diǎn):

json包的摘取,不顯示頁(yè)碼的加載,post和get的區(qū)別;
面對(duì)反爬蟲(chóng)機(jī)制,多個(gè)瀏覽器爬??;
讀取cvs文件

想找本市內(nèi)一些拉勾網(wǎng)的大咖公司地址,思路如下:

  1. 找到拉勾網(wǎng)月薪在某個(gè)地域某個(gè)數(shù)值以上的發(fā)布信息,抽取公司
  2. 利用公司id找到地址

另外還有一個(gè)辦法就是先找公司id,再找職位,然后進(jìn)行薪酬篩選,但這樣會(huì)遇到很多空值,而且拉勾網(wǎng)的公司id并不是按照城市分布,所以pass。


首先是用搜索找到公司,然后爬取公司ID。休假幾天,手藝就不靈了,一點(diǎn)點(diǎn)東西慢慢的摳。本來(lái)想用bs4爬,拖拖拉拉的也爬不到,只好上群里問(wèn),所以然后幾個(gè)大神就以光速把公司id的json包甩出來(lái)了...
淚,延遲5秒好不好.....這種速度很傷小白自尊的...
總之還是要好好學(xué)習(xí)抓包工具...

22.png

然后就是解析json文件,當(dāng)然是用json.loads。至于字典里面的結(jié)構(gòu),拉勾網(wǎng)略復(fù)雜,不過(guò)這個(gè)也不用重新發(fā)明輪子,革命先輩們已經(jīng)有無(wú)數(shù)經(jīng)驗(yàn)了。
參考文章:
Python爬蟲(chóng)-爬拉勾網(wǎng) by 靠譜叔
python爬蟲(chóng)-爬取拉鉤職位-單線程 by Mr_Cxy

3.png
圖片.png

這里有兩個(gè)地方要注意:

  1. 請(qǐng)求url的時(shí)候是post,不是get,所以把post字典的幾個(gè)參數(shù),first,pn提交。(可以在上圖的headers里看到)first值為true,pn是頁(yè)數(shù)。如果不提交參數(shù),那么就只能爬到第一頁(yè)?!淳W(wǎng)的網(wǎng)頁(yè)是不顯示頁(yè)碼加載的
def get_company_id(page):
    url = 'https://www.lagou.com/jobs/positionAjax.json?*****'(根據(jù)搜索不同)
    html = requests.post(url, headers=get_headers(),data = {'first':'true','pn':{page}}).content#page寫(xiě)入一個(gè)循環(huán)
    infos1=json.loads(html)
    infos=infos1['content']['positionResult']['result']#按照字典結(jié)構(gòu)一層層的選下來(lái)
    list_Id=[]#如果不做列表和循環(huán),每頁(yè)就只記錄第一個(gè)id
    for item in infos:
        companyId=item['companyId']
        print(companyId)
        list_Id.append(companyId)
    return list_Id

記得摘取字典的時(shí)候一定要加循環(huán),就算只是試一個(gè)也要加,不要偷懶,不然會(huì)出來(lái)一堆怪東西。


  1. 因?yàn)槔淳W(wǎng)的反爬蟲(chóng)機(jī)制很厲害,所以很容易被ban,這里yaung大神給了我一堆瀏覽器,感覺(jué)可以用一百年了...然后隨機(jī)選取就好了。
ua_list=[
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
      ]

def get_headers():
    temp_headers = {
        'Host':'www.lagou.com',
        'Origin':'https://www.lagou.com'
    }
    user_agent = random.choice(ua_list)
    temp_headers = {'User-Agent': user_agent}
    return temp_headers

  1. 然后就是把id放入cvs,再?gòu)腸vs讀取。(因?yàn)檫@里我是分兩天做的,所以做了兩個(gè)py文件)
import os
os.chdir('F:')
company_list = csv.reader(open('lagou.csv', encoding='utf-8'))
for i in company_list:
    print(i)
    url='https://www.lagou.com/gongsi/'+str(i[0])+'.html'

開(kāi)始讀取的id(i)總是拼不進(jìn)url,后來(lái)程工提醒,從cvs讀取的數(shù)值,就算一行只有一個(gè),也是列表格式,所以要加入索引,再轉(zhuǎn)變?yōu)樽址袷健?br> 拉勾網(wǎng)的結(jié)構(gòu)很啰嗦,層層疊疊的,xpath也不太好取,試了幾次,換成bs完成。

感覺(jué)這個(gè)功課還是挺難的,不知道是自己旅行回來(lái)變笨了,還是敵人太狡猾(拉勾網(wǎng)的反爬機(jī)制)??傊菜阃瓿闪?,繼續(xù)撒花!

下一步計(jì)劃:
完成拉勾網(wǎng)數(shù)據(jù)分析
好好學(xué)習(xí)抓包工具charles。(一定要學(xué)了!)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容