[英]HTTP Error 400: Bad Request (urllib)
我正在編寫一個腳本來獲取有關紐約市建築物的信息。 我知道我的代碼可以工作並返回我想要的。 我以前在做手動輸入,它奏效了。 現在我試圖讓它從文本文件中讀取地址並使用該信息訪問網站,但出現此錯誤:
urllib.error.HTTPError: HTTP 錯誤 400: 錯誤請求
我相信這與網站不喜歡從不是瀏覽器的東西進行大量訪問有關。 我聽說過一些關於用戶代理的事情,但不知道如何使用它們。 這是我的代碼:
from bs4 import BeautifulSoup
import urllib.request
f = open("FILE PATH GOES HERE")
def getBuilding(link):
r = urllib.request.urlopen(link).read()
soup = BeautifulSoup(r, "html.parser")
print(soup.find("b",text="KEYWORDS IM SEARCHING FOR GO HERE:").find_next("td").text)
def main():
for line in f:
num, name = line.split(" ", 1)
newName = name.replace(" ", "+")
link = "LINK GOES HERE (constructed from num and newName variables)"
getBuilding(link)
f.close()
if __name__ == "__main__":
main()
400 錯誤意味着服務器無法理解您的請求(例如,格式錯誤的語法)。 也就是說,由開發人員決定他們想要返回什么狀態代碼,不幸的是,並非每個人都嚴格遵循其預期含義。
查看此頁面以了解有關 HTTP 狀態代碼的更多詳細信息。
關於如何設置用戶代理:用戶代理設置在請求頭中,基本上定義了發出請求的客戶端。 這是公認的用戶代理列表。 您將需要使用urllib2
而不是urllib
,但urllib2
也是一個內置包。 我將向您展示如何更新getBuilding
函數以使用該模塊設置標頭。 但我建議查看請求庫。 我只是發現這非常簡單,並且得到了高度的采用/支持。
蟒蛇2:
from urllib2 import Request, urlopen
def getBuilding(link):
q = Request(link)
q.add_header('User-Agent', 'Mozilla/5.0')
r = urlopen(q).read()
soup = BeautifulSoup(r, "html.parser")
print(soup.find("b",text="KEYWORDS IM SEARCHING FOR GO HERE:").find_next("td").text)
蟒蛇3:
from urllib.request import Request, urlopen
def getBuilding(link):
q = Request(link)
q.add_header('User-Agent', 'Mozilla/5.0')
r = urlopen(q).read()
soup = BeautifulSoup(r, "html.parser")
print(soup.find("b",text="KEYWORDS IM SEARCHING FOR GO HERE:").find_next("td").text)
注意:Python v2 和 v3 之間的唯一區別是 import 語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.