日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python selenium實現智聯招聘數據爬取

瀏覽:33日期:2022-06-21 17:41:59
一、主要目的

最近在玩Python網絡爬蟲,然后接觸到了selenium這個模塊,就捉摸著搞點有意思的,順便記錄一下自己的學習過程。

二、前期準備 操作系統:windows10 瀏覽器:谷歌瀏覽器(Google Chrome) 瀏覽器驅動:chromedriver.exe (我的版本—>89.0.4389.128 ) 程序中我使用的模塊

import csvimport osimport reimport jsonimport timeimport requestsfrom selenium.webdriver import Chromefrom selenium.webdriver.remote.webelement import WebElementfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import uifrom selenium.webdriver.support import expected_conditionsfrom lxml import etreechrome = Chrome(executable_path=’chromedriver’) 用的的第三方包均可用 pip install 進行安裝 上面代碼中的最后一行表示創建一個瀏覽器對象三、思路分析

1.大致看了一下網站主頁,需要先登錄后才能進行信息的獲取,所以只能先模擬登錄。

python selenium實現智聯招聘數據爬取python selenium實現智聯招聘數據爬取python selenium實現智聯招聘數據爬取

進入登錄頁面的時候是顯示二維碼登錄,我們不用這個,因為確實不怎么方便,我們通過模擬點擊頁面上的按鈕進入到賬號、密碼登錄的頁面輸入進行登錄。下面是如何驅動瀏覽器進行上述的一系列操作⬇⬇⬇⬇⬇⬇

# 獲取登錄頁面chrome.get(url)# 找出賬號密碼登錄的頁面chrome.find_element_by_class_name(’zppp-panel-qrcode-bar__triangle’).click()chrome.find_element_by_xpath(’//div[@class='zppp-panel-normal__inner']/ul/li[2]’).click()# 找到賬戶密碼的交互接口并進行輸入user_name = chrome.find_elements_by_xpath(’//div[@class='zppp-input__container']/input’)[0]pass_word = chrome.find_elements_by_xpath(’//div[@class='zppp-input__container']/input’)[1]# 進行需要登錄的賬號密碼輸入user_name.send_keys(’**********’) pass_word.send_keys(’***********’)# 輸入完成后點擊登錄chrome.find_element_by_class_name(’zppp-submit’).click()# 此處手動實現滑塊驗證# 動動你的小鼠標

2.登陸后大致看了一下主頁決定先從城市開始爬,在它的原文件中分析出它的位置,如圖↓

python selenium實現智聯招聘數據爬取

我用的是requests請求獲取到網頁原文件,再使用正則匹配到我們需要的內容(就是上圖中那一坨紅色的↑),之后再進行一系列的解析獲取到每個城市與其對應的url ⬇⬇⬇⬇⬇⬇

resp = requests.get(url, headers=headers) if resp.status_code == 200:html = resp.textjson_data = re.search(r’<script>__INITIAL_STATE__=(.*?)</script>’, html).groups()[0]data = json.loads(json_data)cityMapList = data[’cityList’][’cityMapList’] # dictfor letter, citys in cityMapList.items(): # print(f’-----{letter}-------’) for city in citys: # citys 是個列表,里面嵌套的字典’’’{ ’name’: ’鞍山’, ’url’: ’//www.zhaopin.com/anshan/’, ’code’: ’601’, ’pinyin’: ’anshan’ }’’’city_name = city[’name’]city_url = ’https:’ + city[’url’]

此處我們獲取的是所有的城市和它url,如果都要進行爬取的話數據量略大,因此我們可以篩選出需要爬取的城市減輕工作量,反正爬取城市我們想怎么改就怎么改哈哈哈哈哈。

3.接下來我們就可以進行工作的查找了,既然我們用的是Python來爬取的,那就查詢Python相關的工作吧。

python selenium實現智聯招聘數據爬取

首先還是要找到輸入搜索信息的框框并找出它的接口,然后進行輸入(這里輸入的是Python),輸入完成后找到右邊的搜索按鈕(就是那個放大鏡)進行點擊操作,下面是模擬瀏覽器操作的代碼實現⬇⬇⬇⬇⬇

# 根據class_name 查詢WebElement找出輸入的位置input_seek: WebElement = chrome.find_element_by_class_name(’zp-search__input’)input_seek.send_keys(’Python’) # 輸入Pythonclick: WebElement = # 找出搜索按鈕并點擊 chrome.find_element_by_xpath(’//div[@class='zp-search__common']//a’) click.click()chrome.switch_to.window(chrome.window_handles[1])

這里就有一個需要注意的地方了:在輸入Python點擊搜索按鈕后會彈出一個新的窗口,而驅動瀏覽器的 程序還在第一個窗口,因此需要使用 swiitch_to_window(chrome.window_handles[n]) --<n表示目標窗口的 位置,最開始的第一個窗口是0> 方法進行窗口的切換。

4.數據的解析和提取

python selenium實現智聯招聘數據爬取

很明顯可以看出需要的信息都在 class='positionlist '下,進一步分析可知數據都在 a標簽下,接下來就可以使用Xpath進行數據的提取⬇⬇⬇⬇⬇

root = etree.HTML(html) divs = root.xpath(’//div[@class='positionlist']’) # element對象 for div in divs: # 崗位 # 里面對應的是一個個列表position = div.xpath(’.//a//div[@class='iteminfo__line1__jobname']/span[1]’) # 公司company = div.xpath(’//a//div[@class='iteminfo__line1__compname']/span/text()’) # 薪資money = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/p/text()’) # 位置city = div.xpath(’//a//div[@class='iteminfo__line2__jobdesc']/ul/li[1]/text()’) # 經驗experience = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/ul/li[2]/text()’) # 學歷education = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/ul/li[3]/text()’) # 規模scale = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[1]/text()’) # 人數people = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[2]/text()’)

5.獲取下一頁

python selenium實現智聯招聘數據爬取

找到下一頁按鈕并模擬瀏覽器進行點擊,獲取到每一頁所有的數據。

四、具體源代碼

import csvimport osimport reimport jsonimport timeimport requestsfrom selenium.webdriver import Chromefrom selenium.webdriver.remote.webelement import WebElementfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import uifrom selenium.webdriver.support import expected_conditionsfrom lxml import etreechrome = Chrome(executable_path=’chromedriver’)# 模擬登錄def login(url): # 獲取登錄頁面 chrome.get(url) # 找出賬號密碼登錄的頁面 chrome.find_element_by_class_name(’zppp-panel-qrcode-bar__triangle’).click() chrome.find_element_by_xpath(’//div[@class='zppp-panel-normal__inner']/ul/li[2]’).click() # 找到賬戶密碼的交互接口并進行輸入 user_name = chrome.find_elements_by_xpath(’//div[@class='zppp-input__container']/input’)[0] pass_word = chrome.find_elements_by_xpath(’//div[@class='zppp-input__container']/input’)[1] # 此處輸入登錄智聯招聘的賬號密碼 user_name.send_keys(’***********’) pass_word.send_keys(’**********’) # 輸入完成后點擊登錄 chrome.find_element_by_class_name(’zppp-submit’).click() # 此處手動實現滑塊驗證 # 動動手指滑一劃完成登錄 time.sleep(10) get_allcity(’https://www.zhaopin.com/citymap’) # 在登錄狀態下進行所有城市信息的獲取def get_allcity(url): resp = requests.get(url, headers=headers) if resp.status_code == 200:html = resp.textjson_data = re.search(r’<script>__INITIAL_STATE__=(.*?)</script>’, html).groups()[0]data = json.loads(json_data)cityMapList = data[’cityList’][’cityMapList’] # dictfor letter, citys in cityMapList.items(): # print(f’-----{letter}-------’) for city in citys: # citys 是個列表,里面嵌套的字典’’’{ ’name’: ’鞍山’, ’url’: ’//www.zhaopin.com/anshan/’, ’code’: ’601’, ’pinyin’: ’anshan’ }’’’city_name = city[’name’]city_url = ’https:’ + city[’url’]# 篩選城市query_citys = (’成都’)if city_name in query_citys: print(f’正在獲取{city_name}的信息’) get_city_job(city_url) time.sleep(3)else: # print(f’{city_name} 不在搜索范圍內!’) pass else:print(’網頁獲取失敗’)def get_city_job(url): chrome.get(url) # 打開城市信息 # 根據class_name 查詢WebElement找出輸入的位置 input_seek: WebElement = chrome.find_element_by_class_name(’zp-search__input’) input_seek.send_keys(’Python’) # 輸入Python click: WebElement = chrome.find_element_by_xpath(’//div[@class='zp-search__common']//a’) # 找出搜索按鈕并點擊 click.click() # 切換到第二個頁面 chrome.switch_to.window(chrome.window_handles[1]) time.sleep(1) time.sleep(1) # 等待class_name為“sou-main__list” div元素出現 ui.WebDriverWait(chrome, 30).until(expected_conditions.visibility_of_all_elements_located((By.CLASS_NAME, ’sou-main__list’)),’查找的元素一直沒有出現’ ) # 判斷當前查詢結果是否不存在 no_content = chrome.find_elements_by_class_name(’positionlist’) if not no_content:print(’當前城市未查找到Python崗位’) else:# 提取查找結果parse(chrome.page_source)def parse(html): root = etree.HTML(html) divs = root.xpath(’//div[@class='positionlist']’) # element對象 items = {} for div in divs:# 崗位position = div.xpath(’.//a//div[@class='iteminfo__line1__jobname']/span[1]’) # 公司company = div.xpath(’//a//div[@class='iteminfo__line1__compname']/span/text()’) # 薪資money = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/p/text()’) # 位置city = div.xpath(’//a//div[@class='iteminfo__line2__jobdesc']/ul/li[1]/text()’) # 經驗experience = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/ul/li[2]/text()’) # 學歷education = div.xpath(’.//a//div[@class='iteminfo__line2__jobdesc']/ul/li[3]/text()’) # 規模scale = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[1]/text()’) # 人數people = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[2]/text()’) for position_, company_, money_, city_, experience_, education_, scale_, people_ in zip(position, company, money, city, experience, education, scale, people): # 獲取它的title屬性值 string = position_.attrib.get(’title’) items[’position’] = string items[’company’] = company_ items[’money’] = money_.strip() items[’city’] = city_ items[’experience’] = experience_ items[’education’] = education_ items[’scale’] = scale_ items[’people’] = people_ itempipeline(items) # 獲取下一頁 next_page()def itempipeline(items): has_header = os.path.exists(save_csv) # 文件頭 with open(save_csv, ’a’, encoding=’utf8’) as file:writer = csv.DictWriter(file, fieldnames=items.keys())if not has_header: writer.writeheader() # 寫入文件頭writer.writerow(items)def next_page(): # 找到下一頁按鈕 time.sleep(0.5) button = chrome.find_elements_by_xpath(’//div[@class='soupager']/button[@class='btn soupager__btn']’) if not button:print(f’獲取完畢,請在 {save_csv} 里查看!!’)exit() else:button[0].click() # 點擊下一頁time.sleep(1)parse(chrome.page_source)if __name__ == ’__main__’: n = 0 headers = {’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400’,’Cookie’: ’aQQ_ajkguid=B4D4C2CC-2F46-D252-59D7-83356256A4DC; id58=e87rkGBclxRq9+GOJC4CAg==; _ga=GA1.2.2103255298.1616680725; 58tj_uuid=4b56b6bf-99a3-4dd5-83cf-4db8f2093fcd; wmda_uuid=0f89f6f294d0f974a4e7400c1095354c; wmda_new_uuid=1; wmda_visited_projects=%3B6289197098934; als=0; cmctid=102; ctid=15; sessid=E454865C-BA2D-040D-1158-5E1357DA84BA; twe=2; isp=true; _gid=GA1.2.1192525458.1617078804; new_uv=4; obtain_by=2; xxzl_cid=184e09dc30c74089a533faf230f39099; xzuid=7763438f-82bc-4565-9fe8-c7a4e036c3ee’ } save_csv = ’chengdu-python.csv’ login(’https://passport.zhaopin.com/login?bkUrl=%2F%2Fi.zhaopin.com%2Fblank%3Fhttps%3A%2F%2Fwww.zhaopin.com%2Fbeijing%2F’)五、部分成果展示

python selenium實現智聯招聘數據爬取

六、總結

個人認為智聯的反爬還是比較友好的,為什么呢?因為之前在測試程序的時候模擬登錄了好幾十次,都是在短時間內,而且一開始比較擔心IP被封但是最后也沒出什么問題。還有就是selenium受網速影響比較大,等待時間設置過長吧,會影響程序速度,但是時間過短吧又會損數據。

到此這篇關于python selenium實現智聯招聘數據爬取的文章就介紹到這了,更多相關selenium實現智聯招聘爬取內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品伊人| 综合一区av| 国产99久久久国产精品成人免费| 韩国女主播一区二区三区| 国产色综合网| 88xx成人免费观看视频库| 日韩一区二区中文| 国产一区二区三区不卡视频网站 | 国产极品模特精品一二| 夜久久久久久| 日韩专区在线视频| 免费毛片在线不卡| 亚洲精品一二三区区别| 国内自拍视频一区二区三区| 成人台湾亚洲精品一区二区| 91精品高清| 国产亚洲欧美日韩精品一区二区三区 | 六月婷婷一区| 成人在线视频免费| 日韩精品午夜视频| 亚洲国产成人精品女人| 国产极品模特精品一二| 亚洲18在线| 亚洲自拍另类| 国产综合欧美| 四虎884aa成人精品最新| 精品美女在线视频| 国产精品成人3p一区二区三区| 亚洲精品成人| 欧洲一级精品| 日韩欧美综合| 最新中文字幕在线播放| 精品免费av| 老司机精品视频在线播放| 欧美黄色一区二区| 国产精品亚洲成在人线| 综合激情视频| 精品91福利视频| 精品丝袜在线| 免费成人性网站| 亚洲高清毛片| 国产女人18毛片水真多18精品| 日韩久久精品网| 日韩欧美在线精品| 日韩国产网站| 国产精品一区二区av日韩在线| 亚洲精品电影| 国产中文字幕一区二区三区| 婷婷精品在线| 欧美偷窥清纯综合图区| 亚洲一区二区三区高清| 麻豆成人在线观看| 麻豆成人在线观看| 美女91精品| 不卡一区2区| 伊人久久亚洲热| 国产色播av在线| 四虎国产精品免费久久| 亚洲精品电影| 日韩一区二区三区免费播放| 欧美国产另类| 久久久国产精品网站| 亚洲人成亚洲精品| 国产亚洲综合精品| 影音先锋久久| 黑丝一区二区| 一区二区三区视频免费观看| 国产成人黄色| 欧美成人一二区| 久久精品国产亚洲一区二区三区| 国产日韩三级| 欧美在线看片| 国产欧美日韩精品一区二区三区| 麻豆9191精品国产| 蜜桃视频一区二区| 亚洲精品在线国产| 91欧美精品| 黄色aa久久| 亚洲先锋成人| 爽好久久久欧美精品| 国产免费久久| 国产伦精品一区二区三区视频| 欧美日韩99| 免费看久久久| 亲子伦视频一区二区三区| 欧美日韩在线观看视频小说| 99视频一区| 国产精品一卡| 成人影视亚洲图片在线| 丁香六月综合| 青青国产精品| av综合电影网站| 日韩精品一级中文字幕精品视频免费观看 | 欧美日韩a区| 97精品视频在线看| 国产黄大片在线观看| 老鸭窝毛片一区二区三区| 亚洲精品国产日韩| 麻豆视频一区二区| 久久精品青草| 国产精品一区二区精品| 激情91久久| 国产成人免费| 亚洲精品人人| 影音先锋久久| 精品理论电影在线| 日韩av在线播放中文字幕| 欧美日韩精品在线一区| 911亚洲精品| 99国产精品视频免费观看一公开| 欧美欧美黄在线二区| 蜜桃一区二区三区在线| 国产精品白浆| 亚洲精品大片| 99久久精品网站| 69堂免费精品视频在线播放| 99国产精品99久久久久久粉嫩| 亚洲综合电影| 欧美亚洲tv| 日韩欧美激情| 综合激情视频| 一区二区精品| 久色成人在线| 日韩午夜av| 日韩午夜免费| 中文在线资源| 黑人精品一区| 国产精品yjizz视频网| 日韩国产欧美在线视频| 在线日韩成人| 日韩黄色在线观看| 少妇精品久久久一区二区| 亚洲综合另类| 男女男精品视频网| 欧美亚洲国产精品久久| 欧美sss在线视频| 999国产精品| 欧美精品自拍| 噜噜噜躁狠狠躁狠狠精品视频 | 日韩中文字幕无砖| 在线综合亚洲| 日韩中文字幕| 久久中文字幕一区二区三区| 日韩精品dvd| 欧美日韩一二| 亚洲人妖在线| 久久久久伊人| 久久久久久久久丰满| 久久亚洲一区| 久久久久久亚洲精品美女| 美女久久久久久| 久久97久久97精品免视看秋霞| av高清一区| 丝袜亚洲另类欧美| 三级欧美在线一区| 欧美成a人片免费观看久久五月天| 日韩精品dvd| 四虎国产精品免费久久| 国产精品xx| 三级在线观看一区二区| 欧美黄色一区| 天堂av在线| 男女性色大片免费观看一区二区 | 久久精品国产在热久久| 午夜影院一区| 日韩av网站在线观看| 欧美韩日一区| 亚洲精品自拍| 亚洲高清毛片| 精品72久久久久中文字幕| 丝袜诱惑制服诱惑色一区在线观看 | 久久这里只有| 视频一区视频二区中文| 欧美xxxx中国| 伊人影院久久| 久久99影视| 亚洲久草在线| 欧美日韩在线观看视频小说| 国产高清视频一区二区| 激情久久久久久| 免费看av不卡| 精品视频一区二区三区在线观看 | 国产精品欧美一区二区三区不卡| 久久电影一区| 亚洲h色精品| 日韩av片子| 麻豆91在线播放| 久久精品人人| 国产一区二区三区四区五区传媒| 日本成人在线视频网站| 99精品电影| 成人看片网站| 福利精品一区| 88久久精品| 欧美亚洲三级| 久久成人高清| 精品国产乱码久久久| 成人午夜亚洲| 日韩欧美二区| 美女久久久久|