天天看點

Boss直聘Python爬蟲實戰

準備工作

  • 建立項目-建立PythonFile
  • 安裝爬蟲子產品
    Boss直聘Python爬蟲實戰
    1
          
    pip install requests
          
  • requests的常用函數
    • request.get(),對應http協定的get請求,也就是把網頁下載下傳下來。
    • request.post(),對應Http協定的post請求,就是把資料上傳到網頁伺服器。
  • 觀察boss直聘的url。
    1
          
    https://www.zhipin.com/c101250100-p110101/
          
    • 通過觀察發現,後面應該是城市代碼和職位代碼
    • 通過檢查-network發現,城市代碼應該是儲存在city.json裡面
    • 職位代碼應該是儲存在position.json裡面
Boss直聘Python爬蟲實戰
Boss直聘Python爬蟲實戰

通過觀察:city.json的url為

1
      
https://www.zhipin.com/wapi/zpCommon/data/city.json
      

postion.json的url為

1
      
https://www.zhipin.com/wapi/zpCommon/data/position.json
      
Boss直聘Python爬蟲實戰

爬取城市代碼

  • 測試連接配接
    1
    2
    3
    4
    5
          
    import requests
    # requests-->請求
    url = 'https://www.zhipin.com/wapi/zpCommon/data/city.json'  # boss直聘城市連結
    response = requests.get(url)  
    print(response)  # 列印響應
          
    傳回值:
    1
          
    <Response [200]>
          

    200:代表傳回成功

    404:網絡連接配接失敗

    500:伺服器奔潰

  • 加入浏覽器僞裝頭’user-agent’,防止被伺服器發現你是爬蟲
    1
          
    headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}
          
  • 第一次列印
    1
    2
    3
    4
    5
    6
    7
    8
          
    import requests
    from pprint import pprint
    url = 'https://www.zhipin.com/wapi/zpCommon/data/city.json'  # boss直聘城市代碼
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) \
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}
    response = requests.get(url, headers=headers)
    data = response.json()  # 從傳回對象中提取json
    pprint(data)
          
    結果如下:
    Boss直聘Python爬蟲實戰
    根據上圖觀察,傳回的json可以當成是一個多層字典。

資料均在

zpData\cityList

下,于是對zpData進行第一次解包。

Boss直聘Python爬蟲實戰

對cityList進行第二次解包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      
import requests
from pprint import pprint
url = 'https://www.zhipin.com/wapi/zpCommon/data/city.json'  # boss直聘城市代碼
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}
response = requests.get(url, headers=headers)
data = response.json()  # 從傳回對象中提取json
data1 = data['zpData']['cityList']
# pprint(data1)
for ii in data1:
    province = ii['name']  # 省名
    province_code = ii['code']  # 省對應的代碼
    city_list = ii['subLevelModelList']
    for ci in city_list:
      city = ci['name']  # 城市名
        city_code = ci['code']  # 城市代碼
      print(province, '\t', province_code, '\t', city, '\t', city_code)
      
Boss直聘Python爬蟲實戰

省和城市代碼就爬取完畢了,直接粘貼到excel就可以。至于如何直接導出excel,後面再說。