1. 程式人生 > >Python爬取旅遊評論

Python爬取旅遊評論

Python爬蟲目前是基於requests包,下面是該包的文件,查一些資料還是比較方便。

爬取某旅遊網站的產品評論,通過分析,獲取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,也算是為了伺服器減負吧。