电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

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

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

二、前期準備 操作系統(tǒng):windows10 瀏覽器:谷歌瀏覽器(Google Chrome) 瀏覽器驅(qū)動: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 進行安裝 上面代碼中的最后一行表示創(chuàng)建一個瀏覽器對象三、思路分析

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

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

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

# 獲取登錄頁面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()# 此處手動實現(xiàn)滑塊驗證# 動動你的小鼠標

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

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

我用的是requests請求獲取到網(wǎng)頁原文件,再使用正則匹配到我們需要的內(nèi)容(就是上圖中那一坨紅色的↑),之后再進行一系列的解析獲取到每個城市與其對應的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,如果都要進行爬取的話數(shù)據(jù)量略大,因此我們可以篩選出需要爬取的城市減輕工作量,反正爬取城市我們想怎么改就怎么改哈哈哈哈哈。

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

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

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

# 根據(jù)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點擊搜索按鈕后會彈出一個新的窗口,而驅(qū)動瀏覽器的 程序還在第一個窗口,因此需要使用 swiitch_to_window(chrome.window_handles[n]) --<n表示目標窗口的 位置,最開始的第一個窗口是0> 方法進行窗口的切換。

4.數(shù)據(jù)的解析和提取

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

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

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()’) # 經(jīng)驗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()’) # 規(guī)模scale = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[1]/text()’) # 人數(shù)people = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[2]/text()’)

5.獲取下一頁

python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

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

四、具體源代碼

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] # 此處輸入登錄智聯(lián)招聘的賬號密碼 user_name.send_keys(’***********’) pass_word.send_keys(’**********’) # 輸入完成后點擊登錄 chrome.find_element_by_class_name(’zppp-submit’).click() # 此處手動實現(xiàn)滑塊驗證 # 動動手指滑一劃完成登錄 time.sleep(10) get_allcity(’https://www.zhaopin.com/citymap’) # 在登錄狀態(tài)下進行所有城市信息的獲取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} 不在搜索范圍內(nèi)!’) pass else:print(’網(wǎng)頁獲取失敗’)def get_city_job(url): chrome.get(url) # 打開城市信息 # 根據(jù)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元素出現(xiàn) ui.WebDriverWait(chrome, 30).until(expected_conditions.visibility_of_all_elements_located((By.CLASS_NAME, ’sou-main__list’)),’查找的元素一直沒有出現(xiàn)’ ) # 判斷當前查詢結(jié)果是否不存在 no_content = chrome.find_elements_by_class_name(’positionlist’) if not no_content:print(’當前城市未查找到Python崗位’) else:# 提取查找結(jié)果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()’) # 經(jīng)驗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()’) # 規(guī)模scale = div.xpath(’.//a//div[@class='iteminfo__line2__compdesc']/span[1]/text()’) # 人數(shù)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實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

六、總結(jié)

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

到此這篇關于python selenium實現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取的文章就介紹到這了,更多相關selenium實現(xiàn)智聯(lián)招聘爬取內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 |