在python使用requests擷取網頁的時候,有時會出現Connection aborted 10054「遠端主機已強制關閉一個現存的連線」的錯誤訊息,
主要的原因,是因為所請求的網址主機判斷我們為爬蟲或者是惡意攻擊,所以阻擋連線。
緣起
最近在練習使用python製作爬蟲程式,以[露天拍賣]作為練習的對象,在當中隨意找了一個賣場,嘗試爬取賣場的商品名、連結、價格、圖片
沒想到就出現了這個討厭的錯誤訊息。
10054錯誤訊息
程式碼
解決方式
我們會被認定為爬蟲或惡意程式,大概有幾種可能性。一個是user-agent
沒有設置。另一個是請求的頻率太高。
所以我們可以針對這兩種去做對應的處理。
加上user-agent
在requests的headers加上user-agent
並偽裝成一般瀏覽器。像這個範例就是加上user-agent
後,就能夠正常請求了~
from bs4 import BeautifulSoup import requests headers = {'user-agent': '"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'} respond = requests.get("http://class.ruten.com.tw/user/index00.php?s=cire6611&p=1", headers=headers) soup = BeautifulSoup(respond.content,"html.parser") data =(soup.select('.rt-store-goods-disp-mix')) #data = soup.findAll('class="rt-store-goods-disp-mix"') #print (data) for product in data: print (product.find('div', {'class': 'item-info'}).h3.a.text) print (product.find('div', {'class': 'item-info'}).h3.a['href']) print (product.find('div', {'class': 'item-info'}).div.p.span.text.replace("直接購買價:", "").strip()) print (product.find('div', {'class': 'item-img'}).a.img['src'])
線上測試
請求頻率太高
至於太頻繁請求,我們可以用sleep降低頻率,或者使用proxy。這部份尚未實測改天再奉上。
文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)
原文連結:
https://blog.aidec.tw/post/python-requests-10054
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記