Scrapy代理101:如何為Scrapy設(shè)置代理
盡管Scrapymake使您輕松開(kāi)發(fā)可擴(kuò)展的Web爬蟲(chóng)和爬網(wǎng)程序,而無(wú)需使用代理,但在許多情況下它們沒(méi)有用。讓我向您展示如何為Scrapy設(shè)置代理以及最佳使用代理。
對(duì)Web抓取感興趣或開(kāi)發(fā)人員,我需要您記住,即使Web抓取是合乎道德和法律的,網(wǎng)站也不希望其網(wǎng)頁(yè)和數(shù)據(jù)被抓取,他們將在其內(nèi)部做任何事情處置來(lái)阻止你。不幸的是,由于IP地址是計(jì)算機(jī)網(wǎng)絡(luò)(例如Internet)中的通用標(biāo)識(shí)手段,因此IP跟蹤是最重要的技術(shù),因此只有少數(shù)有效的技術(shù)可供他們使用。盡管IP跟蹤對(duì)他們來(lái)說(shuō)似乎有效,但作為網(wǎng)絡(luò)抓取工具和自動(dòng)化開(kāi)發(fā)人員,我們很幸運(yùn)地?fù)碛写恚梢詭椭档虸P跟蹤和阻止的效率。
Scrapy是一個(gè)流行的Web抓取框架,可用于開(kāi)發(fā)可伸縮的抓取器和搜尋器。作為Web抓取工具,Scrapy支持代理,因此您很可能會(huì)在抓取項(xiàng)目中使用代理。如果您不知道如何隨意設(shè)置代理,請(qǐng)繼續(xù)閱讀本文,我將在本文中向您展示如何完成。
Scrapy –概述
與Requests和BeautifulSoup之類(lèi)的東西不同,Scrapy是一個(gè)完整的Web抓取和抓取框架,您不能僅使用它來(lái)發(fā)送HTTP請(qǐng)求;您還可以使用它來(lái)解析HTML文檔并執(zhí)行其他任務(wù)。實(shí)際上,僅Scrapy就像是Requests,BeautifulSoup和其他抓取庫(kù)的組合。關(guān)于此工具,您會(huì)喜歡的一件事是它的功能廣泛,并且可以選擇添加自定義功能。使用Scrapy,您不僅可以構(gòu)建Web抓取工具或搜尋器,還可以輕松地將其部署到云中。
這個(gè)抓取框架是由Scrapinghub開(kāi)發(fā)的,Scrapinghub是受歡迎的數(shù)據(jù)服務(wù)提供商,也對(duì)數(shù)據(jù)提取工具的開(kāi)發(fā)感興趣。Scrapy于2008年首次發(fā)布。該工具是用Python編寫(xiě)的,用于Python蜘蛛開(kāi)發(fā)。它可以說(shuō)是最快的Python框架-也是最受歡迎和功能強(qiáng)大的。與Scrapy相關(guān)的主要問(wèn)題是它的學(xué)習(xí)曲線(xiàn),以及面對(duì)JavaScript豐富的網(wǎng)站時(shí)無(wú)助的事實(shí)。
?Python Web爬網(wǎng)庫(kù)和框架
?如何使用Javascript從網(wǎng)站抓取HTML?
Scrapy代理設(shè)置
與Requests和BeautifulSoup的組合相比,Scrapy的學(xué)習(xí)曲線(xiàn)更為陡峭。但是,毫無(wú)疑問(wèn),它更具可伸縮性,更適合復(fù)雜的開(kāi)發(fā)。在設(shè)置代理時(shí),您可能會(huì)想知道該過(guò)程實(shí)際上非常簡(jiǎn)單。您可以遵循兩種方法在Scrapy中設(shè)置代理,這些將在下面討論。
?方法1:通過(guò)將其作為請(qǐng)求參數(shù)傳遞來(lái)設(shè)置代理
在Scrapy中設(shè)置代理的最簡(jiǎn)單方法是將代理作為參數(shù)傳遞。如果您要使用特定的代理,則此方法是完美的。Scrapy中有一個(gè)名為Http-Proxy-Middleware的中間件,該中間件從請(qǐng)求中獲取代理值并正確設(shè)置。以下是如何通過(guò)Requests參數(shù)在Scrapy中設(shè)置代理的示例代碼。
def start_requests(self):
for url in self.start_urls:
return Request(url=url, callback=self.parse,
headers={"User-Agent": "scrape web"},
meta={"proxy": "http:/154.112.82.262:8050"})
?方法2:創(chuàng)建自定義代理中間件
對(duì)于更模塊化的方法,我建議您創(chuàng)建一個(gè)自定義的中間件。我將向您展示如何創(chuàng)建自定義代理中間件并將其添加到您的中間件列表中。中間件基本上是Scrapy在處理請(qǐng)求時(shí)將運(yùn)行的一段代碼。以下是您可以使用的自定義中間件模板。
from w3lib.http import basic_auth_header
class CustomProxyMiddleware(object):
def process_request(self, request, spider):
request.meta[“proxy”] = "http://192.168.1.1:8050"
request.headers[“Proxy-Authorization”] =
basic_auth_header(“<proxy_user>”, “<proxy_pass>”)
編寫(xiě)完上面的內(nèi)容之后,您可以啟用它并將其放在Http-Proxy-Middleware之前,如下所示。
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.CustomProxyMiddleware': 350,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
}
如何驗(yàn)證Scrapy代理
如果您按照上述任何步驟操作并填寫(xiě)了正確的代理數(shù)據(jù),則代表已從Scrapy端設(shè)置。但是他們?cè)诠ぷ鲉??您將需要?duì)其進(jìn)行測(cè)試。為此,請(qǐng)將請(qǐng)求發(fā)送到任何代理查詢(xún)工具(例如Whatismyip.com) –如果它顯示您的真實(shí)IP地址,則說(shuō)明設(shè)置或您要使用的代理有問(wèn)題。