日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

利用python爬虫(案例7)--X讯招聘的小职位们

發(fā)布時(shí)間:2023/12/19 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python爬虫(案例7)--X讯招聘的小职位们 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)筆記


爬取X訊招聘的小職位們

寫(xiě)個(gè)小案例,我們想爬取X訊招聘網(wǎng)站里處于1級(jí)頁(yè)面的職位名稱和處于2級(jí)頁(yè)面的工作職責(zé)工作要求。由于這個(gè)X訊招聘網(wǎng)站是動(dòng)態(tài)加載的,所以需要抓取我們與網(wǎng)站進(jìn)行交互時(shí)產(chǎn)生的數(shù)據(jù)包。


爬取步驟

①確定X訊招聘的URL地址(https://careers.tencent.com/search.html)

②在1級(jí)頁(yè)面中抓包,并獲取1級(jí)頁(yè)面中的json地址

③在2級(jí)頁(yè)面中抓包,獲取2級(jí)頁(yè)面中的json地址

④爬取數(shù)據(jù),并將數(shù)據(jù)存放在mysql數(shù)據(jù)庫(kù)中


1級(jí)頁(yè)面抓包


我們打開(kāi)X訊招聘網(wǎng)站后,右鍵打開(kāi)審查元素–>點(diǎn)擊Network–>點(diǎn)擊XHR(我們要的數(shù)據(jù)包主要在這里)–>刷新網(wǎng)頁(yè),獲取多個(gè)數(shù)據(jù)包–>點(diǎn)開(kāi)preview, 依次判斷哪個(gè)數(shù)據(jù)包中有我們要的數(shù)據(jù)–>確定我們想要數(shù)據(jù)包

經(jīng)過(guò)這么一堆步驟后,我找到了想要的數(shù)據(jù)包。
參數(shù)RecruitPostName所對(duì)應(yīng)的值,就是我們要爬取的職位名稱:

我們點(diǎn)開(kāi)Headers,查看數(shù)據(jù)包的頭部信息,獲取JSON文件的URL地址(Request URL),以及查詢參數(shù):

JSON文件的URL地址:

https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1587432663964&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn

查詢參數(shù):

timestamp:1587432663964 countryId: cityId: bgIds: productId: categoryId: parentCategoryId: attrId: keyword: pageIndex:1 pageSize:10 language:zh-cn area:cn

我們看到,pageIndex表示的可能表示的是第幾頁(yè);pageSize表示的可能是一頁(yè)中有多少職位信息;而timestamp應(yīng)該是時(shí)間戳,我們知道每次發(fā)請(qǐng)求時(shí),時(shí)間戳肯定都不一樣,如果服務(wù)端需要時(shí)間戳這個(gè)查詢參數(shù),那么就需要我們?cè)趐ython中自己生成,如果不需要,就可以把這個(gè)查詢參數(shù)從URL中剔除,或者隨便寫(xiě)一個(gè)整數(shù)(比如1)。


2級(jí)頁(yè)面抓包


按照和上面類似的步驟,我們?cè)?級(jí)頁(yè)面中,抓到了想要的數(shù)據(jù)包。
而參數(shù)Requirement和Responsibility所對(duì)應(yīng)的值,就是我們要爬取的工作要求與工作職責(zé):

點(diǎn)開(kāi)Headers,獲取JSON文件的URL地址(Request URL),以及查詢參數(shù):

JSON文件的URL地址:

https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1587434334600&postId=1188745462794948608&language=zh-cn

查詢參數(shù):

timestamp:1587434334600 postId:1188745462794948608 language:zh-cn

我們看到, 有個(gè)查詢參數(shù)叫postId,這個(gè)參數(shù)我們應(yīng)該是需要的,關(guān)鍵是,我們?nèi)绾潍@取這個(gè)查詢參數(shù)值,或者找到這個(gè)查詢參數(shù)的規(guī)律呢?

不像之前遇到pageIndex查詢參數(shù),我們一看就知道是表示頁(yè)數(shù)的,但是這個(gè)postId參數(shù)貌似沒(méi)啥規(guī)律可循啊…陷入僵局.JPG

這可咋整?

不要驚慌!這個(gè)值不可能憑空出現(xiàn)。此時(shí),我們可以把之前獲取的新信息擼一遍,看一看有沒(méi)有這個(gè)查詢參數(shù)的線索。什么新信息?哪來(lái)的新信息?有鴨,就是在1級(jí)頁(yè)面中抓取到的JSON文件

這時(shí),我們可以回到1級(jí)頁(yè)面,看一看在1級(jí)頁(yè)面中抓取到的JSON文件里,里是否有關(guān)于這個(gè)查詢參數(shù)的線索:

{ Id: 0, PostId: "1188745462794948608", RecruitPostId: 54633, RecruitPostName: "21557-音視頻流媒體傳輸算法工程師(深圳)", CountryName: "中國(guó)", LocationName: "深圳", BGName: "CSIG", ProductName: "騰訊云", CategoryName: "技術(shù)", Responsibility: "負(fù)責(zé)實(shí)時(shí)音視頻通話、直播、視頻會(huì)議等場(chǎng)景的流媒體網(wǎng)絡(luò)傳輸算法的預(yù)研和開(kāi)發(fā),包括但不限于: 1. 負(fù)責(zé)流媒體傳輸中網(wǎng)絡(luò)狀態(tài)的實(shí)時(shí)檢測(cè)及算法選型和集成; 2. 負(fù)責(zé)損傷網(wǎng)絡(luò)下的網(wǎng)絡(luò)擁塞算法的研究和調(diào)優(yōu)落地; 3. 負(fù)責(zé)受限網(wǎng)絡(luò)下多路流媒體的分布式中轉(zhuǎn)算法設(shè)計(jì)和實(shí)現(xiàn); 4. 負(fù)責(zé)流媒體傳輸中音視頻QOE/QOS的實(shí)現(xiàn)與調(diào)優(yōu)。", LastUpdateTime: "2020年04月21日", PostURL: "http://careers.tencent.com/jobdesc.html?postId=1188745462794948608", SourceID: 1, IsCollect: false, IsValid: true },

有了!PostId: "1188745462794948608"和我們的postId查詢參數(shù)值一毛一樣!

所以,我們拿到1級(jí)頁(yè)面的JSON文件時(shí),除了要獲取每一個(gè)職位的RecruitPostName,還需要獲取每一個(gè)職位的PostId


開(kāi)始敲代碼吧


首先我們創(chuàng)建一個(gè)mysql數(shù)據(jù)表用于存儲(chǔ)數(shù)據(jù):

CREATE TABLE tencent_career(id int NOT NULL AUTO_INCREMENT, recruitpostname varchar(50) NOT NULL, requirement varchar(500) NOT NULL, responsibility varchar(500) NOT NULL, PRIMARY KEY (id));

敲python代碼:

# -*- coding: utf-8 -*-import requests import json import time import random import pymysqlclass CareerSpider:def __init__(self):self.headers = self.headers = {'Accept':'application/json, text/javascript, */*; q=0.01','User-Agent':'Mozilla/5.0'}self.url01 = 'https://careers.tencent.com/tencentcareer/api/post/Query?countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'self.url02 = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?postId={}&language=zh-cn'self.db = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',password = '19970928',database = 'datacup',charset = 'utf8')self.cur = self.db.cursor()#請(qǐng)求函數(shù)def get_page(self, url):res = requests.get(url, headers=self.headers)#res.encoding = 'utf-8'#將得到的JSON類型的字符串,轉(zhuǎn)換成python數(shù)據(jù)類型print('status_code:', res.status_code)#print('url:', res.url)return json.loads(res.text)def get_data(self, json_dict):job_data = []job_list = json_dict['Data']['Posts']for item in job_list:recruitpostname = item['RecruitPostName']print(recruitpostname)postId = item['PostId']url02 = self.url02.format(postId)responsibility, requirement = self.get_data_two(url02)job_data.append([recruitpostname, requirement, responsibility])self.write_data(job_data)def get_data_two(self, url):json_dict = self.get_page(url)responsibility = json_dict['Data']['Responsibility']requirement = json_dict['Data']['Requirement']return (responsibility, requirement)def write_data(self, data_list):sql = 'insert into tencent_career(recruitpostname, requirement, responsibility) \values(%s, %s, %s);'try:self.cur.executemany(sql, data_list)self.db.commit()except Exception as e:self.db.rollback()print('錯(cuò)誤信息:', e)def main(self):for index in range(1, 3):url01 = self.url01.format(index)one_json_dict = self.get_page(url01)self.get_data(one_json_dict)time.sleep(random.uniform(0.5, 1.5))self.cur.close()self.db.close()if __name__ == '__main__':start = time.time()spider = CareerSpider()spider.main()end = time.time()print('執(zhí)行時(shí)間:%.2f' % (end-start))

控制臺(tái)部分輸出(共20條):

status_code: 200 32032-PC客戶端高級(jí)工程師(深圳) status_code: 200 15573-天天愛(ài)消除動(dòng)畫(huà)設(shè)計(jì)師(上海) status_code: 200 執(zhí)行時(shí)間:8.40

查詢mysql數(shù)據(jù)庫(kù)


我們先檢驗(yàn)一下數(shù)據(jù)是否導(dǎo)入到tencent_career表里:

SELECT * FROM tencent_career;

語(yǔ)句執(zhí)行記錄:

11:33:17 SELECT * FROM tencent_career LIMIT 0, 1000 20 row(s) returned 0.000 sec / 0.000 sec

查詢的部分結(jié)果:

# id, recruitpostname, requirement, responsibility '1', '35595-信息流內(nèi)容策略高級(jí)產(chǎn)品經(jīng)理', '1)三年及以上信息流內(nèi)容推薦策略相關(guān)工作經(jīng)驗(yàn);\n2)有數(shù)據(jù)分析、信息流推薦產(chǎn)品經(jīng)驗(yàn)者優(yōu)先考慮;\n3)具有強(qiáng)推進(jìn)能力,并有強(qiáng)烈的責(zé)任心和自驅(qū)力。 ', '1)對(duì)騰訊信息流產(chǎn)品大盤(pán)內(nèi)容現(xiàn)狀進(jìn)行分析,尋找在內(nèi)容建設(shè)方向和推薦策略方向的優(yōu)化空間; \n2)問(wèn)題驅(qū)動(dòng)進(jìn)行內(nèi)容和推薦全鏈路的分析、優(yōu)化,包括內(nèi)容建設(shè)、內(nèi)容理解、用戶畫(huà)像等環(huán)節(jié); \n3)分析挖掘不同用戶場(chǎng)景和不同用戶群體的內(nèi)容需求,建立可行的產(chǎn)品和內(nèi)容策略并推動(dòng)落地;\n4)負(fù)責(zé)跟蹤內(nèi)容策略的數(shù)據(jù)效果并持續(xù)分析,為大盤(pán)各核心指標(biāo)的正向增長(zhǎng),提供內(nèi)容側(cè)支持;\n5)定期對(duì)競(jìng)品的內(nèi)容策略進(jìn)行測(cè)評(píng),輸出有價(jià)值的內(nèi)容策略優(yōu)化方案和建議,并負(fù)責(zé)推動(dòng)落地。\n' '2', '30361-SLAM算法工程師', '1. 熟悉單目、雙目或深度的SLAM算法; \n2. 有較強(qiáng)的工程開(kāi)發(fā)能力,能獨(dú)立完成算法移植和優(yōu)化; \n3. 在SLAM或者計(jì)算機(jī)視覺(jué)方向發(fā)過(guò)高質(zhì)量論文的優(yōu)先; \n4. 熟悉Android/IOS 開(kāi)發(fā)的優(yōu)先。\n5. 具備良好的敬業(yè)精神和團(tuán)隊(duì)合作精神,善于分析和解決問(wèn)題,富有想象力和學(xué)習(xí)能力。', '1. 負(fù)責(zé)移動(dòng)端增強(qiáng)現(xiàn)實(shí)引擎開(kāi)發(fā)和優(yōu)化 \n2. 負(fù)責(zé)SLAM前沿技術(shù)研發(fā)及相關(guān)產(chǎn)品實(shí)現(xiàn) '

很好!20條職位信息都導(dǎo)入數(shù)據(jù)庫(kù)了。


這時(shí),我想查看工作要求里有"碩士"兩個(gè)字的職位信息:

SELECT * FROM tencent_career WHERE requirement REGEXP '碩士';

查詢的部分結(jié)果:

# id, recruitpostname, requirement, responsibility '3', 'TEG16-高級(jí)秘書(shū)(深圳)', '碩士,英語(yǔ)能力強(qiáng),有一定的海外工作經(jīng)驗(yàn)更佳;\n有3-7年大型企業(yè)相關(guān)助理工作經(jīng)驗(yàn)本科也可以考慮;\n有大型項(xiàng)目或活動(dòng)組織經(jīng)驗(yàn),溝通協(xié)調(diào)能力強(qiáng);\n踏實(shí)、穩(wěn)重,靈活,有服務(wù)意識(shí)及全局觀。', '為GM提供高效專業(yè)的助理支持服務(wù),協(xié)助高管進(jìn)行各項(xiàng)日常工作管理,安排和落實(shí)高管參與的內(nèi)外部各項(xiàng)會(huì)議、活動(dòng)、差旅行程等;\n跟進(jìn)領(lǐng)導(dǎo)交付的各項(xiàng)任務(wù),保證事務(wù)的順利落實(shí);\n在業(yè)務(wù)側(cè)協(xié)助高管推進(jìn)業(yè)務(wù)或項(xiàng)目,配合協(xié)調(diào)與維護(hù)內(nèi)外部公共關(guān)系;\n協(xié)助安排和組織高管團(tuán)隊(duì)的各項(xiàng)會(huì)議、活動(dòng)等;\n負(fù)責(zé)組織活動(dòng)和文化落地,活躍部門(mén)組織氛圍;及系統(tǒng)級(jí)節(jié)慶、拓展活動(dòng)組織;\n擔(dān)任部門(mén)內(nèi)各項(xiàng)行政人事工作接口人,包括行政、人事、資產(chǎn)、費(fèi)用、合同、文檔、資料管理等;\n部門(mén)財(cái)務(wù)預(yù)算制定管理工作;協(xié)助制定并實(shí)施部門(mén)的管理規(guī)章制度及各項(xiàng)流程;\n組織和維護(hù)所在秘書(shū)團(tuán)隊(duì)的日常事務(wù)運(yùn)作及大型項(xiàng)目活動(dòng)。' '11', 'WXG10-企業(yè)微信音視頻引擎開(kāi)發(fā)(成都)', '音視頻相關(guān)專業(yè)碩士及以上學(xué)歷;\n熟悉c\\c++,熟悉網(wǎng)絡(luò),精通信號(hào)處理相關(guān)知識(shí),了解深度學(xué)習(xí)相關(guān)技能;\n有5年以上音視頻引擎優(yōu)化的相關(guān)工作經(jīng)驗(yàn);', '負(fù)責(zé)企業(yè)微信音頻或視頻功能的引擎研發(fā)工作;\n音頻方向主要為負(fù)責(zé)語(yǔ)音編解碼性能優(yōu)化,降噪rnn算法優(yōu)化,語(yǔ)音fec優(yōu)化,會(huì)議室回聲處理,語(yǔ)音網(wǎng)絡(luò)策略算法優(yōu)化等算法工作;\n視頻方向主要為負(fù)責(zé)H265的視頻會(huì)議算法優(yōu)化,超分辨率算法優(yōu)化,高清會(huì)議室視頻算法優(yōu)化等工作;'

很好,查到了,貌似一個(gè)職位是高級(jí)秘書(shū),一個(gè)職位是引擎開(kāi)發(fā)。



后記:在寫(xiě)這個(gè)案例的過(guò)程中,出現(xiàn)過(guò)兩次小意外。

第一個(gè)小意外:我一開(kāi)始把由瀏覽器向服務(wù)端發(fā)送的請(qǐng)求頭信息,都寫(xiě)在python程序里了,結(jié)果導(dǎo)致由python程序訪問(wèn)服務(wù)端出現(xiàn)404錯(cuò)誤,后來(lái)我在python代碼中刪除了一些請(qǐng)求頭信息,只留下了User-Agent和Accept,程序就正常訪問(wèn)了。

第二個(gè)小意外:最開(kāi)始在創(chuàng)建mysql數(shù)據(jù)表時(shí),我將requirement和responsibility字段設(shè)置為varchar(200)結(jié)果報(bào)出錯(cuò)誤信息"Data too long for column 'requirement' at row 8", 并且由于設(shè)置了回滾rollback,所以,報(bào)錯(cuò)之前的職位信息全部都沒(méi)有存入數(shù)據(jù)庫(kù),只有報(bào)錯(cuò)后的職位信息存入了數(shù)據(jù)庫(kù)。后來(lái),我設(shè)置varchar(500)就沒(méi)有出現(xiàn)該問(wèn)題了。

總結(jié)

以上是生活随笔為你收集整理的利用python爬虫(案例7)--X讯招聘的小职位们的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕免费在线观看视频 | 青娱乐超碰 | 青青草欧美 | 国产高潮失禁喷水爽到抽搐 | www.com欧美 | 天堂一区二区三区 | 日韩精品一区二区在线 | 色哒哒影院| 国产毛片av | 91免费短视频 | av大全免费观看 | 亚洲精品乱码久久久久久写真 | 自拍偷拍第2页 | 影音先锋啪啪 | 成人在线网 | 欧美色悠悠 | 日韩一二三四区 | 高hhhhh| 伊人久久五月 | 国产一区美女 | 吃奶摸下的激烈视频 | 黄色动漫在线免费观看 | 亚洲精品白虎 | 国产精品福利小视频 | 韩国日本在线观看 | 麻豆一二三区 | 国产日韩成人 | 色噜噜日韩精品欧美一区二区 | 99riAv国产精品无码鲁大师 | 国产无遮挡又黄又爽又色视频 | 成人福利视频在线观看 | 高级家教课程在线观看 | 一区二区三区欧美日韩 | 精品二区在线 | 人与动物黄色片 | 日韩电影在线一区 | 高潮一区二区三区 | 色老头在线视频 | 日本在线观看免费 | 黄色免费网页 | 亚洲免费网 | 青青草娱乐在线 | 亚洲美女精品视频 | 午夜视频在线观看一区二区 | 在线免费视频观看 | av免费在线播放 | 亚洲影院av| 国产叼嘿视频在线观看 | 久久久久久久久久久久久久久久久久 | 五月婷婷激情综合网 | 亚洲一区av在线 | 一区二区三区免费看视频 | 国产乱码精品一区二区三区中文 | 天天躁夜夜躁狠狠躁 | 国产一区免费观看 | 4438x亚洲| 在线a免费 | 丰满岳乱妇一区二区三区 | 韩国精品视频在线观看 | 国产精品高潮呻吟久久aⅴ码 | 在线亚洲欧美 | 鲁片一区二区三区 | 国产又粗又猛又爽又 | 风韵多水的老熟妇 | 色噜噜影院 | 久久久久五月 | 日本高清视频在线播放 | 午夜精品久久久久久毛片 | 在线观看jizz | 日产精品久久久一区二区 | 婷婷中文字幕 | 久久久久久久穴 | 高清国产一区 | 亚洲第5页 | 99视频在线免费 | 亚洲男人在线 | 麻豆 美女 丝袜 人妻 中文 | 99网站| 特黄av | 91cn.com| 国产a视频精品免费观看 | 成年人av网站 | 国产精品国产三级国产专播精品人 | 中文字幕av久久 | 久久偷看各类女兵18女厕嘘嘘 | h片网站在线观看 | 无码一区二区三区免费 | 亚洲第一欧美 | 日日骚影院| 日韩爱爱免费视频 | 成人快手免费看片 | www好男人 | 亚洲女人天堂 | 日韩小视频在线观看 | 日本特黄成人 | 久久一区二区三区四区 | 久草国产精品视频 | 久久av红桃一区二区小说 | 抱着老师的嫩臀猛然挺进视频 |