2 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個贊
您缺少網(wǎng)站可能需要的一些標(biāo)頭。
我建議使用requestspackage 而不是urllib,因?yàn)樗`活。請參閱下面的工作示例:
import requests
url = "https://www.idealista.com/areas/alquiler-viviendas/?shape=%28%28wt_%7BF%60m%7Be%40njvAqoaXjzjFhecJ%7BebIfi%7DL%29%29"
querystring = {"shape":"((wt_{F`m{e@njvAqoaXjzjFhecJ{ebIfi}L))"}
payload = ""
headers = {
'authority': "www.idealista.com",
'cache-control': "max-age=0",
'upgrade-insecure-requests': "1",
'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
'sec-fetch-site': "none",
'sec-fetch-mode': "navigate",
'sec-fetch-user': "?1",
'sec-fetch-dest': "document",
'accept-language': "en-US,en;q=0.9"
}
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
print(response.text)
從那里你可以使用 bs4 解析主體:
pageSoup = soup(response.text, "html.parser")
但是,請注意,您嘗試抓取的網(wǎng)站可能會顯示驗(yàn)證碼,因此您可能需要輪換user-agent標(biāo)頭和 IP 地址。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個贊
您收到的 HTTP 403 錯誤意味著 Web 服務(wù)器拒絕了腳本發(fā)出的頁面請求,因?yàn)樗鼪]有訪問該頁面的權(quán)限/憑據(jù)。
我可以從這里訪問您的示例中的頁面,因此最有可能發(fā)生的情況是網(wǎng)絡(luò)服務(wù)器注意到您正在嘗試抓取它并禁止您的 IP 地址請求更多頁面。Web 服務(wù)器通常這樣做是為了防止抓取工具影響其性能。
添加回答
舉報