在python使用requests擷取網頁的時候,有時會出現Connection aborted 10054「遠端主機已強制關閉一個現存的連線」的錯誤訊息,
主要的原因,是因為所請求的網址主機判斷我們為爬蟲或者是惡意攻擊,所以阻擋連線。

緣起

最近在練習使用python製作爬蟲程式,以[露天拍賣]作為練習的對象,在當中隨意找了一個賣場,嘗試爬取賣場的商品名、連結、價格、圖片

沒想到就出現了這個討厭的錯誤訊息。

10054錯誤訊息

01.JPG

程式碼

python爬蟲範例

解決方式

我們會被認定為爬蟲或惡意程式,大概有幾種可能性。一個是user-agent 沒有設置。另一個是請求的頻率太高。

所以我們可以針對這兩種去做對應的處理。

加上user-agent

在requests的headers加上user-agent並偽裝成一般瀏覽器。像這個範例就是加上user-agent後,就能夠正常請求了~

03.JPG

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'])

線上測試

https://repl.it/repls/CrispDarkorangePixels

請求頻率太高

至於太頻繁請求,我們可以用sleep降低頻率,或者使用proxy。這部份尚未實測改天再奉上。



文章轉載或引用,請先告知並保留原文出處與連結!!3Q

原文連結:
https://blog.aidec.tw/post/python-requests-10054