簡體   English   中英

Python 請求 Cookie 問題(網頁抓取)

[英]Python Requests Cookie Issues (Web Scraping)

我目前正在編寫一個網絡爬蟲,為我的 Python Flask 服務器提供數據。 我的目標是向服務器發送 POST 請求並檢索 JSON。 我的 Flask API 目前托管在運行 Linux 的 Heroku dyno 上。 不久前,服務器添加了 cookie 驗證,這意味着我必須使用 cookie 發送我的 POST 請求。 但是,服務器最近還添加了某種 IP 匹配,這意味着我無法在我的 Windows 機器上為 Heroku 服務器使用相同的 cookie 字符串。 這是我在兩台機器上運行的內容:

import requests

url = "https://coursebook.utdallas.edu/clips/clip-coursebook.zog" # POST endpoint

payload = "action=search&s%5B%5D=ecs+3390&s%5B%5D=term_20f" # "ecs 3390" is the query
headers = {
  'Connection': 'keep-alive',
  'Accept': '*/*',
  'DNT': '1',
  'X-Requested-With': 'XMLHttpRequest',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  'Origin': 'https://coursebook.utdallas.edu',
  'Sec-Fetch-Site': 'same-origin',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Dest': 'empty',
  'Referer': 'https://coursebook.utdallas.edu/search',
  'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6',
  'Cookie': 'PTGSESSID=052a6577047da9c404825cc393c56445'
}

response = requests.request("POST", url, headers=headers, data = payload)

print(response.text.encode('utf8'))

在我的 Windows 機器上,我收到了很好的響應; 但是,當我使用相同的代碼在 MacOS 上運行它時,它會返回一個空白響應,因為 cookie 不匹配(您可以使用完全相同的代碼嘗試它); 如果我然后在 Mac 上訪問該網站並手動獲取 cookie 字符串以正常方式發送請求,並將其替換為 Python 代碼,它現在可以在 Mac 上運行。

但是,這需要我親自打開瀏覽器,轉到 url,然后單擊按鈕發送 POST 請求,然后從開發人員控制台獲取 cookie 字符串。 這在 Heroku dynos 上顯然是不可能的,這意味着我已經從我的 raspberry pi 運行這個服務器一段時間了。

我試圖獲取登錄頁面( https://coursebook.utdallas.edu/search ),我可以在其中發送 GET 請求並從標題中獲取 SET-COOKIES,但該 cookie 字符串似乎不起作用奇怪的。 我很確定這應該很簡單,因為在網站上發送請求似乎一點也不難。 為長篇文章道歉,但如果您有任何想法,請告訴我! 我的 raspberry pi 會感謝大家終於能夠關閉。

通過使用無頭 Selenium 獲取 cookie 來解決,然后使用它直到它過期,在這種情況下,只需再次運行 get cookie 腳本。 這是我的代碼片段: Github 鏈接

在 Selenium 上設置 Heroku 的鏈接(還檢查更新的響應): 中等鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM