亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取智聯(lián)招聘的招聘信息助你換工作成功(組圖) )

優(yōu)采云 發(fā)布時(shí)間: 2022-02-20 16:02

  c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取智聯(lián)招聘的招聘信息助你換工作成功(組圖)

)

  每個(gè)上班族都要換幾次工作,那么如何在網(wǎng)上找到自己喜歡的工作呢?如何提前準備理想工作的面試?今天,就讓我們一起來(lái)?yè)寠Z智聯(lián)招聘的招聘信息,助你轉業(yè)成功!

  操作平臺:Windows

  Python版本:Python3.6

  IDE:崇高文本

  其他工具:Chrome瀏覽器

  1、網(wǎng)頁(yè)分析1.1 分析請求地址

  以北京海淀區一位python工程師為例進(jìn)行網(wǎng)頁(yè)分析。打開(kāi)智聯(lián)招聘首頁(yè),選擇北京地區,在搜索框中輸入“python工程師”,點(diǎn)擊“搜索職位”:

  

  接下來(lái)跳轉到搜索結果頁(yè)面,按“F12”打開(kāi)開(kāi)發(fā)者工具,然后在“熱門(mén)區域”一欄中選擇“海淀”,我們看一下地址欄:

  

  ?

  從地址欄的后半部分,searchresult.ashx?jl=Beijing&kw=python Engineer&sm=0&isfilter=1&p=1&re=2005 可以看出,我們要自己構造地址。接下來(lái),我們需要分析開(kāi)發(fā)者工具,按照圖中的步驟找到我們需要的數據:Request Headers 和 Query String Parameters:

  

  構造請求地址:

  paras = {

'jl': '北京', # 搜索城市

'kw': 'python工程師', # 搜索關(guān)鍵詞

'isadv': 0, # 是否打開(kāi)更詳細搜索選項

'isfilter': 1, # 是否對結果過(guò)濾

'p': 1, # 頁(yè)數

're': 2005 # region的縮寫(xiě),地區,2005代表海淀

}

url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)

  請求頭:

  headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

'Host': 'sou.zhaopin.com',

'Referer': 'https://www.zhaopin.com/',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9'

}

  1.2 分析有用的數據

  接下來(lái),我們需要分析有用的數據。我們從搜索結果中需要的數據有:職位、公司名稱(chēng)、公司詳情頁(yè)地址、月薪:

  

  通過(guò)網(wǎng)頁(yè)元素定位找到這些項目在HTML文件中的位置,如下圖所示:

  

  使用正則表達式提取這四項:

  # 正則表達式進(jìn)行解析

pattern = re.compile(&#39;<a style=.*? target="_blank">(.*?)</a>.*?&#39; # 匹配職位信息

&#39;(.*?).*?&#39; # 匹配公司網(wǎng)址和公司名稱(chēng)

&#39;(.*?)&#39;, re.S) # 匹配月薪

# 匹配所有符合條件的內容

items = re.findall(pattern, html)

  注意:部分解析出來(lái)的作業(yè)名有標簽,如下圖所示:

  

  然后解析后需要對數據進(jìn)行處理,去掉標簽,用如下代碼實(shí)現:

  for item in items:

job_name = item[0]

job_name = job_name.replace(&#39;&#39;, &#39;&#39;)

job_name = job_name.replace(&#39;&#39;, &#39;&#39;)

yield {

&#39;job&#39;: job_name,

&#39;website&#39;: item[1],

&#39;company&#39;: item[2],

&#39;salary&#39;: item[3]

}

  2、寫(xiě)入文件

  我們得到的數據的信息項對于每個(gè)位置都是一樣的,可以寫(xiě)入數據庫,但是本文選擇的是csv文件。以下是百度百科的解釋?zhuān)?/p>

  逗號分隔值(Comma-Separated Values,CSV,有時(shí)也稱(chēng)為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味著(zhù)該文件是一個(gè)字符序列,不含必須像二進(jìn)制數字那樣被解讀的數據。

  由于python內置了csv文件操作的庫函數,非常方便:

  import csv

def write_csv_headers(path, headers):

&#39;&#39;&#39;

寫(xiě)入表頭

&#39;&#39;&#39;

with open(path, &#39;a&#39;, encoding=&#39;gb18030&#39;, newline=&#39;&#39;) as f:

f_csv = csv.DictWriter(f, headers)

f_csv.writeheader()

def write_csv_rows(path, headers, rows):

&#39;&#39;&#39;

寫(xiě)入行

&#39;&#39;&#39;

with open(path, &#39;a&#39;, encoding=&#39;gb18030&#39;, newline=&#39;&#39;) as f:

f_csv = csv.DictWriter(f, headers)

f_csv.writerows(rows)

  3、進(jìn)度顯示

  為了找到理想的工作,我們必須篩選更多的職位,那么我們爬取的數據量必須非常大,幾十、幾百甚至上千頁(yè),那么我們必須掌握爬取的進(jìn)度,以便更多地在舒適。啊,所以要添加進(jìn)度條顯示功能。

  本文選擇tqdm進(jìn)行進(jìn)度展示,我們來(lái)看看炫酷的結果(圖片來(lái)源網(wǎng)絡(luò )):

  

  執行以下命令進(jìn)行安裝:pip install tqdm。

  簡(jiǎn)單的例子:

  from tqdm import tqdm

from time import sleep

for i in tqdm(range(1000)):

sleep(0.01)

  4、完整代碼

  以上是對所有函數的分析,以下是完整代碼:

  #-*- coding: utf-8 -*-

import re

import csv

import requests

from tqdm import tqdm

from urllib.parse import urlencode

from requests.exceptions import RequestException

def get_one_page(city, keyword, region, page):

&#39;&#39;&#39;

獲取網(wǎng)頁(yè)html內容并返回

&#39;&#39;&#39;

paras = {

&#39;jl&#39;: city, # 搜索城市

&#39;kw&#39;: keyword, # 搜索關(guān)鍵詞

&#39;isadv&#39;: 0, # 是否打開(kāi)更詳細搜索選項

&#39;isfilter&#39;: 1, # 是否對結果過(guò)濾

&#39;p&#39;: page, # 頁(yè)數

&#39;re&#39;: region # region的縮寫(xiě),地區,2005代表海淀

}

headers = {

&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36&#39;,

&#39;Host&#39;: &#39;sou.zhaopin.com&#39;,

&#39;Referer&#39;: &#39;https://www.zhaopin.com/&#39;,

&#39;Accept&#39;: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8&#39;,

&#39;Accept-Encoding&#39;: &#39;gzip, deflate, br&#39;,

&#39;Accept-Language&#39;: &#39;zh-CN,zh;q=0.9&#39;

}

url = &#39;https://sou.zhaopin.com/jobs/searchresult.ashx?&#39; + urlencode(paras)

try:

# 獲取網(wǎng)頁(yè)內容,返回html數據

response = requests.get(url, headers=headers)

# 通過(guò)狀態(tài)碼判斷是否獲取成功

if response.status_code == 200:

return response.text

return None

except RequestException as e:

return None

def parse_one_page(html):

&#39;&#39;&#39;

解析HTML代碼,提取有用信息并返回

&#39;&#39;&#39;

# 正則表達式進(jìn)行解析

pattern = re.compile(&#39;<a style=.*? target="_blank">(.*?)</a>.*?&#39; # 匹配職位信息

&#39;(.*?).*?&#39; # 匹配公司網(wǎng)址和公司名稱(chēng)

&#39;(.*?)&#39;, re.S) # 匹配月薪

# 匹配所有符合條件的內容

items = re.findall(pattern, html)

for item in items:

job_name = item[0]

job_name = job_name.replace(&#39;&#39;, &#39;&#39;)

job_name = job_name.replace(&#39;&#39;, &#39;&#39;)

yield {

&#39;job&#39;: job_name,

&#39;website&#39;: item[1],

&#39;company&#39;: item[2],

&#39;salary&#39;: item[3]

}

def write_csv_file(path, headers, rows):

&#39;&#39;&#39;

將表頭和行寫(xiě)入csv文件

&#39;&#39;&#39;

# 加入encoding防止中文寫(xiě)入報錯

# newline參數防止每寫(xiě)入一行都多一個(gè)空行

with open(path, &#39;a&#39;, encoding=&#39;gb18030&#39;, newline=&#39;&#39;) as f:

f_csv = csv.DictWriter(f, headers)

f_csv.writeheader()

f_csv.writerows(rows)

def write_csv_headers(path, headers):

&#39;&#39;&#39;

寫(xiě)入表頭

&#39;&#39;&#39;

with open(path, &#39;a&#39;, encoding=&#39;gb18030&#39;, newline=&#39;&#39;) as f:

f_csv = csv.DictWriter(f, headers)

f_csv.writeheader()

def write_csv_rows(path, headers, rows):

&#39;&#39;&#39;

寫(xiě)入行

&#39;&#39;&#39;

with open(path, &#39;a&#39;, encoding=&#39;gb18030&#39;, newline=&#39;&#39;) as f:

f_csv = csv.DictWriter(f, headers)

f_csv.writerows(rows)

def main(city, keyword, region, pages):

&#39;&#39;&#39;

主函數

&#39;&#39;&#39;

filename = &#39;zl_&#39; + city + &#39;_&#39; + keyword + &#39;.csv&#39;

headers = [&#39;job&#39;, &#39;website&#39;, &#39;company&#39;, &#39;salary&#39;]

write_csv_headers(filename, headers)

for i in tqdm(range(pages)):

&#39;&#39;&#39;

獲取該頁(yè)中所有職位信息,寫(xiě)入csv文件

&#39;&#39;&#39;

jobs = []

html = get_one_page(city, keyword, region, i)

items = parse_one_page(html)

for item in items:

jobs.append(item)

write_csv_rows(filename, headers, jobs)

if __name__ == &#39;__main__&#39;:

main(&#39;北京&#39;, &#39;python工程師&#39;, 2005, 10)

  上述代碼的執行效果如圖:

  

  執行完成后會(huì )在py的同級文件夾中生成一個(gè)名為:zl_Beijing_pythonengineer.csv的文件。打開(kāi)后效果如下:

  

  這個(gè)例子的功能比較簡(jiǎn)單。它只捕獲數據,但不分析數據。下一次,我將捕捉更多信息,分析薪資、工作技能要求等各種數據,敬請期待!

  歡迎關(guān)注公眾號:

  

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久