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
- 練習:https://httpbin.org/forms/post, 將結果以pandas表格顯示