requests的post方法

  • 範例:新鮮人查榜
  • 輸入姓名「林怡君」,開啟DevTools / Network, 再點搜尋,再觀察DevTools

  • 以DevTools取得post request中的Form Data, 放入變數form_data

  • 經測試,如request_headers中沒有referer, 則抓不到資料

  • 資料內容看來像JSON型態,用線上JSON美化工具整理資料看看

  • 自己做request_headers及form_data

url = 'https://freshman.tw/ajax/ajax_mysql.php'
request_headers = {
    'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36' \
                 '(KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
    'referer':'https://freshman.tw/',
}
form_data = {
    'q':'林怡君',
    'y':'105+all',
    't':'name',
    'init':'1',
}
r = requests.post(url, headers=request_headers, data=form_data)
print(r.text)
  • 確認為JSON型態後,使用requests物件r的方法json, 將資料轉成Python方便處理的型態
  • type為Python的內建方法,用來查詢資料型態
print(type(r.json()))
print()
print(r.json())
  • 確認資料為字典後,再觀察原始JSON, 看如何取出目標資料
r_dict = r.json()
data_list = r_dict['data']
print(type(data_list))
print()
print(data_list)
print()
for d in data_list:
    print(d)
  • 由於目標資料為「包含字典的list」, 可用資料分析套件pandas的表格功能顯示
import pandas

df = pandas.DataFrame(data_list)
df

results matching ""

    No results matching ""