Python爬蟲目前是基於requests包,下麵是該包的文檔,查一些資料還是比較方便。 http://docs.python-requests.org/en/master/ 爬取某旅游網站的產品評論,通過分析,獲取json文件需要POST指令。簡單來說: GET是將需要發送的信息直接添加在網址後面 ...
Python爬蟲目前是基於requests包,下麵是該包的文檔,查一些資料還是比較方便。
http://docs.python-requests.org/en/master/
爬取某旅游網站的產品評論,通過分析,獲取json文件需要POST指令。簡單來說:
- GET是將需要發送的信息直接添加在網址後面發送
- POST方式是發送一個另外的內容到伺服器
那麼通過POST發送的內容可以大概有三種,即form、json和multipart,目前先介紹前兩種
1.content in form
Content-Type: application/x-www-form-urlencoded
將內容放入dict,然後傳遞給參數data即可。
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post(url, data=payload)
2. content in json
Content-Type: application/json
將dict轉換為json,傳遞給data參數。
payload = {'some': 'data'} r = requests.post(url, data=json.dumps(payload))
或者將dict傳遞給json參數。
payload = {'some': 'data'} r = requests.post(url, json=payload)
然後貼一下簡單的代碼供參考。
import requests import json def getCommentStr(): url = r"https://package.com/user/comment/product/queryComments.json" header = { 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0', 'Accept': r'application/json, text/javascript, */*; q=0.01', 'Accept-Language': r'en-US,en;q=0.5', 'Accept-Encoding': r'gzip, deflate, br', 'Content-Type': r'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': r'XMLHttpRequest', 'Content-Length': '65', 'DNT': '1', 'Connection': r'keep-alive', 'TE': r'Trailers' } params = { 'pageNo': '2', 'pageSize': '10', 'productId': '2590732030', 'rateStatus': 'ALL', 'type': 'all' } r = requests.post(url, headers = header, data = params) print(r.text) getCommentStr()
小技巧
- 對於cookies,感覺可以用瀏覽器的編輯功能,逐步刪除每次發送的cookies信息,判斷哪些是沒有用的?
- 對於測試代碼階段,我還是比較習慣於將爬取的數據存為str,也算是為了伺服器減負吧。