1. 程式人生 > 實用技巧 >同樣是在招聘資訊凌亂的網站上找工作,同學的騷操作把我給整蒙了

同樣是在招聘資訊凌亂的網站上找工作,同學的騷操作把我給整蒙了

前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。

作者:Python進階者

現在在疫情階段,想找一份不錯的工作變得更為困難,很多人會選擇去網上看招聘資訊。可是招聘資訊有一些是錯綜複雜的。而且不能把全部的資訊全部羅列出來,以外賣的58招聘網站來看,資料整理的不清晰。

專案目標

獲取招聘資訊,並批量把地點、 公司名、工資 、下載儲存在txt文件。

專案準備

軟體:PyCharm

需要的庫:requests、lxml、fake_useragent

網站如下:

https://gz.58.com/job/pn2/?param7503=1&from=yjz2_zhaopin&PGTID=0d302408-0000-3efd-48f6-ff64d26b4b1c&ClickID={}

點選下一頁時,ClickID={}每增加一頁自增加1,用{}代替變換的變數,再用for迴圈遍歷這網址,實現多個網址請求。

反爬措施

該網站上的反爬主要有兩點:

1、 直接使用requests庫,在不設定任何header的情況下,網站直接不返回資料

2、同一個ip連續訪問多次,直接封掉ip,起初我的ip就是這樣被封掉的。

為了解決這兩個問題,最後經過研究,使用以下方法,可以有效解決。

1、獲取正常的 http請求頭,並在requests請求時設定這些常規的http請求頭。

2、使用 fake_useragent ,產生隨機的UserAgent進行訪問。

專案實現

1、定義一個class類繼承object,定義init方法繼承self,主函式main繼承self。匯入需要的庫和網址,程式碼如下所示。

import requests
from lxml import etree
from fake_useragent import UserAgent


class  Zhaopin(object):
    def __init__(self):
        self.url = "https://gz.58.com/job/pn2/?param7503=1&from=yjz2_zhaopin&PGTID=0d302408-0000-3efd-48f6-ff64d26b4b1c&ClickID={}"  # /zhuanchang/:搜尋的名字的拼音縮寫

    def main(self):
        pass

if __name__ == '__main__':
    Spider =  Zhaopin()
    Spider.main()

2、隨機產生UserAgent。

  for l in one:
    o = l.xpath('.//a/span[1]/text()')[0].strip()
    t = l.xpath('.//a//span[@class="name"]/text()')[0].strip()
    f = l.xpath('.//p[@class="job_salary"]/text()')
    thr = l.xpath('.//div[@class="comp_name"]//a/text()')[0].strip()
    for e in f:
        boss = '''

 %s:||%s: 
 公司:%s,
 工資:%s元/月
 =========================================================
                                ''' % (o, t, thr, e)
    print(str(boss)

3、傳送請求,獲取響應, 頁面回撥,方便下次請求。

def get_page(self, url):
    res = requests.get(url=url, headers=self.headers)
    html = res.content.decode("utf-8")
    return html

4、xpath解析找到對應的父節點。

def page_page(self, html):
    parse_html = etree.HTML(html)
    one = parse_html.xpath('//div[@class="main clearfix"]//div[@class="leftCon"]/ul/li')

5、for遍歷,定義一個變數food_info儲存,獲取到二級頁面對應的菜 名、 原料 、下載連結。

  for l in one:
    o = l.xpath('.//a/span[1]/text()')[0].strip()
    t = l.xpath('.//a//span[@class="name"]/text()')[0].strip()
    f = l.xpath('.//p[@class="job_salary"]/text()')
    thr = l.xpath('.//div[@class="comp_name"]//a/text()')[0].strip()
    for e in f:
        boss = '''

 %s:||%s: 
 公司:%s,
 工資:%s元/月
 =========================================================
                                ''' % (o, t, thr, e)
    print(str(boss)

6、將結果儲存在txt文件中,如下所示。

f = open('g.txt', 'a', encoding='utf-8')  # 以'w'方式開啟檔案
f.write(str(boss))
# print(house_dict)
f.write("\n")  # 鍵和值分行放,鍵在單數行,值在雙數行
f.close()

7、呼叫方法,實現功能。

html = self.get_page(url)
self.page_page(html)

效果展示

1、點選綠色小三角執行輸入起始頁,終止頁。

2、執行程式後,結果顯示在控制檯,如下圖所示。

3、儲存txt文件到本地,如下圖所示。

4、雙擊檔案,內容如下圖所示。