iT邦幫忙

0

急 python 爬蟲突然遭受阻擋

BB 2021-06-22 15:48:221519 瀏覽

我需要爬取foodpanda網站做作業
之前完全沒問題 就在剛剛突然無法獲得資料
於是我改變程式碼尋找問題




import bs4
import requests
def foodpanda( city_name):
    #建立縣市相對應網址字典
    city = {"台北市":"taipei-city", "新北市":"new-taipei-city", "台中市":"taichung-city","高雄市":"kaohsiung-city",
            "新竹市":"hsinchu-city", "桃園市":"taoyuan-city", "基隆市":"keelung","台南市":"tainan-city",
            "苗栗市":"miaoli-county", "嘉義市":"chiayi-city", "彰化市":"changhua", "宜蘭縣":"yilan-city",
            "屏東縣":"pingtung-city", "雲林縣":"yunlin-county", "花蓮市":"hualien", "南投市":"nantou-county",
            "台東市":"taitung-county","澎湖縣":"penghu-city", "金門縣":"kinmen-city"}
    
    if city_name in city:
        city_url = city[city_name]
        url = "https://www.foodpanda.com.tw/city/"+city_url
        #如果輸入名稱在字典內,取得相對應網址
        
        header = {"User-Agent":"Moziilla/5.0 (Windows NT 6.1; WOW64)\AppleWebKit/537.6 (KHTML, like Gecko) Chrome/45.0.2454.101\
            Safari/537.36"}
        url = requests.get(url, headers = header)
        #下載網頁
        search = bs4.BeautifulSoup(url.text, "lxml")
        #解析下載後的網頁

        print(search.text)
       
foodpanda("台北市")

結果是
Please verify you are a human
Access to this page has been denied because we believe you are using automation tools to browse the website.

This may happen as a result of the following:
Javascript is disabled or blocked by an extension (ad blockers for example)
Your browser does not support cookies

Please make sure that Javascript and cookies are enabled on your browser and that you are not blocking them from loading.

Reference ID: #b9b6dc10-d32d-11eb-b71e-e1e76f2daa6e
Powered by PerimeterX, Inc.

請問我該如何解決

看更多先前的討論...收起先前的討論...
咖咖拉 iT邦研究生 3 級 ‧ 2021-06-22 16:39:01 檢舉
This may happen as a result of the following:
Javascript is disabled or blocked by an extension (ad blockers for example)
Your browser does not support cookies
BB iT邦新手 5 級 ‧ 2021-06-22 16:52:59 檢舉
可是我沒有動過任何設定 這該如何解決呢?
ccutmis iT邦高手 4 級 ‧ 2021-06-22 17:19:25 檢舉
可試試改用Python + Selenium 爬網站
小魚 iT邦大師 1 級 ‧ 2021-06-22 17:35:05 檢舉
被當成機器人了.
BB iT邦新手 5 級 ‧ 2021-06-22 19:58:55 檢舉
我在headers加上 "Host": "https://www.foodpanda.com.tw"
變成出現
400 Bad Request
400 Bad Request
cloudflare
haward79 iT邦新手 4 級 ‧ 2021-06-22 21:05:13 檢舉
(1) 換個 public ip 看看
(2) 清空瀏覽器的快取等資料
(3) 研究一下 header,檢查 referer、token 等
BB iT邦新手 5 級 ‧ 2021-06-22 23:45:56 檢舉
1失敗
2失敗
3我試過很多不同header了 而且因為是單純靜態網站 照理說不太會複雜
今天突然之間就不行了
你「是單純靜態網站 照理說不太會複」這點的想法是錯誤的。
所謂的防爬蟲,除了從程式下手,還能從SERVER下手。

再來,那不可能是純靜態的。一定是偽靜態。
1
froce
iT邦大師 1 級 ‧ 2021-06-23 10:31:07
最佳解答
import requests
def foodpanda( city_name):
    #建立縣市相對應網址字典
    city = {"台北市":"taipei-city", "新北市":"new-taipei-city", "台中市":"taichung-city","高雄市":"kaohsiung-city",
            "新竹市":"hsinchu-city", "桃園市":"taoyuan-city", "基隆市":"keelung","台南市":"tainan-city",
            "苗栗市":"miaoli-county", "嘉義市":"chiayi-city", "彰化市":"changhua", "宜蘭縣":"yilan-city",
            "屏東縣":"pingtung-city", "雲林縣":"yunlin-county", "花蓮市":"hualien", "南投市":"nantou-county",
            "台東市":"taitung-county","澎湖縣":"penghu-city", "金門縣":"kinmen-city"}
    
    if city_name in city:
        city_url = city[city_name]
        url = "https://www.foodpanda.com.tw/city/"+city_url
        #如果輸入名稱在字典內,取得相對應網址
        
        header = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3",
            "Cache-Control": "no-cache",
            "Connection": "keep-alive",
            }
        
        
        session = requests.Session()
        url = session.get(url, headers = header)
        print(url.text)

foodpanda("台北市")

你要裝瀏覽器也裝的像一點...
然後不要重複送太多次,並且間隔拉長,要不然人家又要和你捉迷藏了。

BB iT邦新手 5 級 ‧ 2021-06-23 10:58:37 檢舉

謝謝你 我也變更過許多header試過 但結果是失敗的
想知道的是header設定該如何學習呢
爬文的結果是都不一樣 設定項目多寡也不同

froce iT邦大師 1 級 ‧ 2021-06-23 11:06:03 檢舉

找個瀏覽器,按F12,看他的route,裡面就有request header了...
所以我才說你要裝瀏覽器也要裝的像一點。

另外requests.get()我記得好像沒有辦法用cookie,一定要用session
我沒測試就是了。

0

你這只是被人家抓到你是爬蟲被拒絕了。
解決的方式你要自行去研究看看。

目前我只能幫你推測可能有做了一些安全機制了。怎麼樣的安全機制就得要查看了。

先試著從header下手,再增加能取得COOKIE的方法。
或許就可行了。
不過我沒空幫你研究。爬蟲如何破解人家的防護也是一門學問的。

0
Kert
iT邦新手 2 級 ‧ 2021-06-22 19:58:35

爬蟲 與反爬蟲 是 矛盾之爭

我特別愛接這種案子 一陣子就能又接改版案子

你被對方識破是爬蟲了

建議 1. 偽裝瀏覽器是否正確 cookie js
2. 是否超過爬行次數(太多)
3. 換台機器 及IP 試試
4. 用不同手法(model )試試

BB iT邦新手 5 級 ‧ 2021-06-22 20:06:07 檢舉

目前的話我應該是爬太多次了
看起來網頁也沒有cookie
2失敗了
因為真的很急 加上我還沒學其他的 可能來不及了

1
japhenchen
iT邦大師 1 級 ‧ 2021-06-23 08:08:54

防爬蟲,你只能改學selenium + beautifulSoap套件了

還要下載無頭的chrome

不然繞不過 Google的 我不是機器人 reCaptcha

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-06-23 09:05:54

我需要爬取foodpanda網站做作業
因為真的很急 加上我還沒學其他的 可能來不及了

山不轉路轉
手動用瀏覽器下載
也不過十來個 URL

0
blanksoul12
iT邦新手 5 級 ‧ 2021-06-23 09:21:01

功課? 帶回學校時可能又可以通過了吧,因為轉了IP了吧.

0
1092B0007
iT邦新手 4 級 ‧ 2021-06-23 10:24:38

換個IP試試看

我要發表回答

立即登入回答