我正在用 Python 練習我的網路抓取技巧。我想從房地產網站www.immobilier.ch下載影像。我在其他網站上成功地做到了,但是這次當我想保存 URL 的內容時,保存后我在檔案中看到了這個:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
有誰知道避免它的方法?據我所知,該網站將我標識為機器人。但奇怪的是我可以刮除圖片以外的所有其他內容。我使用請求庫來保存圖片,使用作業系統將它們保存在正確的路徑和 Selenium webdriver (Chrome)。這是我的代碼示例:
image_url = driver.find_element_by_class_name("im__col__content").find_element_by_tag_name("img").get_attribute("src") #comment
path = "C:/Users/potek/Jupyter_projects/APARTMENTS"
with open(os.path.join(path, "Immobilier" str(time.time()) ".jpg"), "wb") as f:
f.write(requests.get(i).content)
uj5u.com熱心網友回復:
如果您使用像 Selenium 和 Webbot 這樣的瀏覽器控制器,發送到服務器的標頭將是有效的,除非您的流量比預期的大得多,否則服務器將無法將您識別為機器人,例如,如果您讓 100 個驅動程式在影像/鏈接等上每秒打開 10 次。
但是,對于您直接發送到影像 URL 的請求,您沒有使用瀏覽器包裝器,而是使用沒有免費標頭的基本請求。您必須手動設定標頭以使服務器認為請求來自合法瀏覽器,例如:
header = {'User-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15'}
res = requests.get(url = 'https://www.immobilier.ch/Medias/bory-cie-agence-immobiliere-sa-21/641557/images/NewThumbnail/20445175.jpg', headers = header)
如果驅動程式有一種方法可以獲取已被使用的標頭,那么這將是一個更好的解決方案,因為某些服務器端請求合法性檢查會比較從某個 IP 地址收到的不同瀏覽器標頭的數量,并暫時阻止這些標頭。如果您想長時間抓取大量資料,請回圈使用十幾個免費代理 IP 地址,例如來自https://free-proxy-list.net/uk-proxy.html以及十幾個或所以標題也有助于讓你不被發現。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364786.html
標籤:Python 图片 硒网络驱动程序 网页抓取 蟒蛇请求
上一篇:使用Selenium提取嵌套元素
