詳解如何使用Python網(wǎng)絡(luò)爬蟲獲取招聘信息
前言
現(xiàn)在在疫情階段,想找一份不錯(cuò)的工作變得更為困難,很多人會(huì)選擇去網(wǎng)上看招聘信息。可是招聘信息有一些是錯(cuò)綜復(fù)雜的。而且不能把全部的信息全部羅列出來,以外賣的58招聘網(wǎng)站來看,資料整理的不清晰。
項(xiàng)目目標(biāo)
獲取招聘信息,并批量把地點(diǎn)、 公司名、工資 、下載保存在txt文檔。
項(xiàng)目準(zhǔn)備
軟件:PyCharm
需要的庫:requests、lxml、fake_useragent
網(wǎng)站如下:
https://gz.58.com/job/pn2/?param7503=1&from=yjz2_zhaopin&PGTID=0d302408-0000-3efd-48f6-ff64d26b4b1c&ClickID={}
點(diǎn)擊下一頁時(shí),ClickID={}每增加一頁自增加1,用{}代替變換的變量,再用for循環(huán)遍歷這網(wǎng)址,實(shí)現(xiàn)多個(gè)網(wǎng)址請(qǐng)求。
反爬措施
該網(wǎng)站上的反爬主要有兩點(diǎn):
1、 直接使用requests庫,在不設(shè)置任何header的情況下,網(wǎng)站直接不返回?cái)?shù)據(jù)
2、同一個(gè)ip連續(xù)訪問多次,直接封掉ip,起初我的ip就是這樣被封掉的。
為了解決這兩個(gè)問題,最后經(jīng)過研究,使用以下方法,可以有效解決。
1、獲取正常的 http請(qǐng)求頭,并在requests請(qǐng)求時(shí)設(shè)置這些常規(guī)的http請(qǐng)求頭。
2、使用 fake_useragent ,產(chǎn)生隨機(jī)的UserAgent進(jìn)行訪問。
項(xiàng)目實(shí)現(xiàn)
1、定義一個(gè)class類繼承object,定義init方法繼承self,主函數(shù)main繼承self。導(dǎo)入需要的庫和網(wǎng)址,代碼如下所示。
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、隨機(jī)產(chǎn)生UserAgent。
for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、發(fā)送請(qǐng)求,獲取響應(yīng), 頁面回調(diào),方便下次請(qǐng)求
def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
4、xpath解析找到對(duì)應(yīng)的父節(jié)點(diǎn)。
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遍歷,定義一個(gè)變量food_info保存,獲取到二級(jí)頁面對(duì)應(yīng)的菜 名、 原 料 、下 載 鏈 接
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、將結(jié)果保存在txt文檔中,如下所示。
f = open('g.txt', 'a', encoding='utf-8') # 以'w'方式打開文件 f.write(str(boss)) # print(house_dict) f.write("\n") # 鍵和值分行放,鍵在單數(shù)行,值在雙數(shù)行 f.close()
7、調(diào)用方法,實(shí)現(xiàn)功能。
html = self.get_page(url) self.page_page(html)
效果展示
1、點(diǎn)擊綠色小三角運(yùn)行輸入起始頁,終止頁。
2、運(yùn)行程序后,結(jié)果顯示在控制臺(tái),如下圖所示。
3、保存txt文檔到本地,如下圖所示。
4、雙擊文件,內(nèi)容如下圖所示。
小結(jié)
1、不建議抓取太多數(shù)據(jù),容易對(duì)服務(wù)器造成負(fù)載,淺嘗輒止即可。
2、本文章就Python爬取招聘網(wǎng),在應(yīng)用中出現(xiàn)的難點(diǎn)和重點(diǎn),以及如何防止反爬,做出了相對(duì)于的解決方案。
3、介紹了如何去拼接字符串,以及列表如何進(jìn)行類型的轉(zhuǎn)換。
4、代碼很簡(jiǎn)單,希望能夠幫到你。
5、歡迎大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。
6、可以選擇自己喜歡的分類,獲取工作,找到自己喜歡工作。
以上就是詳解如何使用Python網(wǎng)絡(luò)爬蟲獲取招聘信息的詳細(xì)內(nèi)容,更多關(guān)于Python爬蟲獲取招聘信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文搞懂Python中pandas透視表pivot_table功能
透視表是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類匯總的表格格式?;蛟S大多數(shù)人都在Excel使用過數(shù)據(jù)透視表,也體會(huì)到它的強(qiáng)大功能,而在pandas中它被稱作pivot_table,今天通過本文給大家介紹Python中pandas透視表pivot_table功能,感興趣的朋友一起看看吧2021-11-11使用Python爬蟲庫requests發(fā)送請(qǐng)求、傳遞URL參數(shù)、定制headers
今天為大家介紹一下Python爬蟲庫requests的發(fā)送請(qǐng)求、傳遞URL參數(shù)、定制headers的基礎(chǔ)使用方法2020-01-01python 使用正則表達(dá)式按照多個(gè)空格分割字符的實(shí)例
今天小編就為大家分享一篇python 使用正則表達(dá)式按照多個(gè)空格分割字符的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python+Selenium實(shí)現(xiàn)讀取網(wǎng)易郵箱驗(yàn)證碼
在自動(dòng)化工作中,有可能會(huì)遇到一些發(fā)送郵箱驗(yàn)證碼類似的功能。本文將利用Python?Selenium實(shí)現(xiàn)自動(dòng)化讀取網(wǎng)易郵箱驗(yàn)證碼,感興趣的可以了解一下2022-03-03Python實(shí)現(xiàn)SVN的目錄周期性備份實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)SVN的目錄周期性備份,實(shí)例分析了Python實(shí)現(xiàn)SVN周期性備份的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Python獲取當(dāng)前路徑實(shí)現(xiàn)代碼
這篇文章主要介紹了 Python獲取當(dāng)前路徑實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05