簡體   English   中英

通過 Python 的“請求”庫發出 HTTP 請求時出現 404 狀態代碼。 但是頁面在瀏覽器中加載良好

[英]404 status code while making HTTP request via Python's “requests” library. However page is loading fine in browser

我正在嘗試通過網絡抓取少數網站的內容。 但我注意到,對於某些網站,我收到的響應狀態代碼為 200。但是,對於其他一些網站,我收到的響應狀態代碼為 404。 但是當我在瀏覽器中打開這些網站(返回 404)時,它對我來說加載很好。 我在這里缺少什么?

例如:

import requests

url_1 = "https://www.transfermarkt.com/jumplist/startseite/wettbewerb/GB1"
url_2 = "https://stackoverflow.com/questions/36516183/what-should-i-use-instead-of-urlopen-in-urllib3"

page_t = requests.get(url_2)
print(page_t.status_code)      #Getting a Not Found page and  404 status

page = requests.get(url_1)
print(page.status_code)       #Getting a Valid HTML page and 200 status

您提到的網站正在檢查請求標頭中的"User-Agent" 您可以通過在requests.get(..)調用中傳遞帶有自定義標頭dict對象來偽造請求中的"User-Agent" 它會讓它看起來像是來自實際的瀏覽器,並且您會收到響應。

例如:

>>> import requests
>>> url = "https://www.transfermarkt.com/jumplist/startseite/wettbewerb/GB1"
>>> headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

# Make request with "User-Agent" Header
>>> response = requests.get(url, headers=headers)
>>> response.status_code
200   # success response

>>> response.text  # will return the website content

有些網站不允許抓取。 所以你需要提供一個帶有用戶代理的標頭,指定瀏覽器的類型和系統,它說它是一個瀏覽器請求而不是一些試圖抓取的代碼

在您的代碼中使用它

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

response = requests.get(url, headers=headers)`

看看這是否有幫助

正如@csabinho 所說,該網站可能正在檢查它是否是真實的(人類)請求。 因此,您需要添加標題以向網站表明它不是 Python 腳本。

hdr = {'User-Agent': 'Mozilla/5.0'}
page_t = requests.get(url_t, headers=hdr)
print(page_t.status_code)
# got 200 code for this

暫無
暫無

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

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