我想要做的是使用資料庫中給定的 URL 抓取餐廳。主機是 https://www.just-eat.co.{tenant}。然后從回應中我將得到window.__INITIAL_STATE__包含 json 的。
for resto in restos:
host = resto['menu_url'].replace('https://', '').split('/')[0]
headers = {
'Accept': 'text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Host': host,
'sec-ch-ua': "\"Google Chrome\";v=\"93\", \" Not;A Brand\";v=\"99\", \"Chromium\";v=\"93\"",
'sec-ch-ua-mobile': '?0',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
}
response = requests.get(url=resto['menu_url'], headers=headers)
data = re.search('(?<=window.__INITIAL_STATE__=)(.*)(?=<)', response.text).group(1)
data = json.loads(data)
問題是:當我抓取一組餐館時,我可以從一開始就從大約 5 個餐廳收集資料(使用頁面的完整 HTML),然后突然我會得到這個(下面的 HTML),然后突然我可以收集完整再次使用 HTML,依此類推。
<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a7">
</script>
<body>
</body>
</html>
獲取此 HTML 會給我一個錯誤,因為我正在嘗試使用固定鍵訪問 json。Try-Except不是解決方案,因為我可以訪問網路中的恢復 URL,除非找不到該頁面。我想要的不是遇到上面的HTML,只遇到包含window.__INITIAL_STATE__的HTML,頁面的完整HTML。
<script>window.__INITIAL_STATE__={...
另外,我正在使用 VPN 訪問 resto 平臺,因為它在我的國家/地區被阻止。
我在這里缺少什么?和標題有關系嗎?嘗試訪問恢復 URL 時,我根據網路上的標題復制了標題。
uj5u.com熱心網友回復:
可能的原因:
1.抓取速度過快會導致系統將您檢測為機器人。添加time.sleep()以減慢速度。
2.根據我的經驗,當抓取一個可以檢測到您是機器人的站點時,它會檢查您是否擁有它在用戶訪問站點時提供給用戶的 cookie,因此請查看它提供給您的 cookie并查看使用相同的 cookie 是否有效。有多個庫可以處理使用 cookie 的請求。參考
3.一些網站還會檢查您的客戶端是否啟用了 JS,如果禁用,可能會導致您被檢測為機器人。參考
4.最后,一些網站使用 Cloudflare 或其他服務來檢測很難繞過的機器人。只是因為螢屏上顯示“正在檢查您的瀏覽器的 IP。由 Cloudflare 提供支持”。進入站點時不顯示并不意味著他們沒有使用 Cloudflare。cfsrape和cloudscrape模塊可能在某些站點上作業,但通常不會。參考
(我目前在 49 分,如果這篇文章沒有幫助,請告訴我調整或洗掉它。我會很感激你不要投反對票,謝謝。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312289.html
標籤:Python python-2.7 网页抓取 蟒蛇请求
下一篇:列印不帶括號的字典
