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

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

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

瀏覽:31日期: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一区二区三区人| 国精品一区二区| 日本午夜精品视频在线观看| 欧洲av不卡| 精品国产麻豆| 久久精品 人人爱| 福利视频一区| 久久精品99国产精品日本| 日韩精品影视| 99久久婷婷这里只有精品| 国产一区二区三区视频在线| 自拍自偷一区二区三区| 欧美午夜不卡| 日韩一区二区免费看| 欧美~级网站不卡| 亚洲伦乱视频| 青青国产精品| 欧美一区成人| 国产精品www.| 国内精品美女在线观看| 日韩av网站免费在线| 欧美午夜不卡| 国精品一区二区| 99精品国产一区二区三区| 久久精品99国产精品日本| 一区二区三区网站| 日韩视频在线一区二区三区| 欧美专区一区二区三区| 亚洲人亚洲人色久| 国产精品久久久久久模特 | 精品中文字幕一区二区三区四区| 国产日韩三级| 日韩久久一区| 国产美女久久| 国产精品7m凸凹视频分类| 国产欧美69| 石原莉奈在线亚洲三区| 精品伊人久久久| 伊人精品久久| 蜜桃av.网站在线观看| 日韩视频1区| 免费观看在线综合| 国产精品久久久亚洲一区| 精品国产欧美日韩| 成人免费电影网址| 日韩毛片网站| 成人日韩av| 欧美福利一区| 精品视频在线观看网站| 一区二区三区网站| 国内一区二区三区| 日本欧洲一区二区| 日韩伦理一区| 九九九精品视频| 中文不卡在线| 日韩大片在线观看| 国产激情精品一区二区三区| 亚洲深夜影院| 韩国三级一区| 98精品视频| 国产日韩一区二区三区在线| 日韩国产综合| 亚洲激情国产| 里番精品3d一二三区| 久久av中文| 性欧美xxxx免费岛国不卡电影| 亚洲尤物av| 尤物tv在线精品| 夜鲁夜鲁夜鲁视频在线播放| 国产精久久一区二区| 国产精品一区亚洲| 激情婷婷综合| 日韩一区二区三区四区五区| 国产亚洲高清一区| 麻豆视频在线观看免费网站黄 | 亚洲91在线| 欧美国产专区| 黄色日韩在线| 国产精品一区二区三区www | 亚洲免费毛片| 国产精品欧美大片| 精品亚洲美女网站| 欧美日韩中出| 亚洲高清成人| 久久高清免费观看| 国产精品久久免费视频| 欧美a级一区| 国产美女久久| 欧洲亚洲一区二区三区| 免费在线欧美视频| 久久男人av| 自拍日韩欧美| 成人av三级| 久久精品毛片| 日韩综合一区二区| 欧美亚洲国产精品久久| 国产精品色在线网站| 国产丝袜一区| 亚洲成人不卡| 日韩精品一页| 中文字幕在线视频网站| 99久久视频| 91精品国产一区二区在线观看| 欧美亚洲免费| 欧美天堂亚洲电影院在线观看| 欧美亚洲网站| 欧美成人综合| 国产精成人品2018| 欧美+亚洲+精品+三区| 欧美aaaaaa午夜精品| 免费人成黄页网站在线一区二区| 牛牛精品成人免费视频| 亚洲精品一二三**| 欧美~级网站不卡| 成人亚洲一区二区| 久久国产尿小便嘘嘘| 图片区亚洲欧美小说区| 麻豆免费精品视频| 丝袜亚洲精品中文字幕一区| 国产伦精品一区二区三区千人斩| 成人在线网站| 欧美激情 亚洲a∨综合| 一区二区三区四区在线观看国产日韩| 老司机精品视频网| 免费看的黄色欧美网站| 亚洲电影在线| 丁香六月综合| 日韩欧美二区| av中文字幕在线观看第一页| 久久精品97| 国产毛片精品| 国产毛片久久久| 国产精品激情电影| 99热免费精品| 蜜臀精品一区二区三区在线观看 | 久久精品国内一区二区三区| 日韩精品三级| 亚洲伊人精品酒店| 婷婷综合福利| 日韩精品一区二区三区中文在线 | 精品国产精品国产偷麻豆| 国产精品毛片| 亚洲h色精品| 三级精品视频| 欧美片第1页| 亚洲二区精品| 亚洲精品九九| 免费视频一区二区三区在线观看| 欧美日韩国产免费观看| 一本色道精品久久一区二区三区| 成人av二区| 日韩精品乱码av一区二区| 美女国产精品久久久| 狠狠久久伊人| 国产美女精品视频免费播放软件| 国产亚洲精aa在线看| 精品国产网站| 香蕉人人精品| 日本欧美在线| 精品一区二区三区中文字幕在线| 91精品国产福利在线观看麻豆| 99精品视频精品精品视频| 免费成人av在线播放| 精品午夜久久| 视频一区视频二区在线观看| 国产精品一国产精品| 91成人网在线观看| 日韩一区二区三区在线看| 岛国av在线播放| 亚洲一区二区av| 久久精品国产久精国产爱| 五月天久久久| 国产一区二区三区91| 国产综合精品| 欧美视频二区| 亚洲一区观看| 日韩国产欧美| 卡一卡二国产精品| 日韩一区二区三区在线看| 久久精品天堂| 美美哒免费高清在线观看视频一区二区| 欧美激情91| 日韩av午夜在线观看| 先锋影音久久久| 亚洲成人免费| 最近高清中文在线字幕在线观看1| 国产日本精品| 日韩精品福利一区二区三区| 欧美日韩国产探花| 成人精品中文字幕| 久久婷婷av| 日韩在线观看| 成人精品天堂一区二区三区| 综合激情网站| 蜜臀久久久99精品久久久久久| 麻豆91精品| 日本亚洲视频| 欧美日韩亚洲一区在线观看| 欧美日本三区|