5個用python編寫非阻塞web爬蟲的方法
前言
大家在讀爬蟲系列的帖子時常常問我怎樣寫出不阻塞的爬蟲,這很難,但可行。通過實現(xiàn)一些小策略可以讓你的網(wǎng)頁爬蟲活得更久。那么今天我就將和大家討論這方面的話題。
用戶代理
你需要關(guān)心的第一件事是設(shè)置用戶代理。 用戶代理是用戶訪問的工具,并告知服務(wù)器用戶正在使用哪個網(wǎng)絡(luò)瀏覽器訪問網(wǎng)站。 如果未設(shè)置用戶代理,許多網(wǎng)站不會讓你查看內(nèi)容。 如果你正在使用rquests庫,可以執(zhí)行如下操作:
你可以通過在 Google 搜索欄中輸入 User-Agent 來獲取用戶代理的信息,并且它會返回你當前的用戶代理信息。
現(xiàn)在,你已經(jīng)有了一個用戶代理,但如何去使用它? 那么,最好的方法是從文本文件、數(shù)據(jù)庫、Python 的列表中選擇一個隨機的 User-Agent 。 Udger 分享了大量的 UA w.r.t 瀏覽器。 比如,對于 Chrome 而言,它看起來像這樣,對 Firefox 來說,又像這樣。 現(xiàn)在讓我們來創(chuàng)建一個函數(shù),它將返回一個隨機 UA ,你可以在請求中使用:
ua_file.txt 包含一個來自我上面共享的網(wǎng)站的每行 UA 。 函數(shù) get_random_ua 將始終從該文件中返回唯一的 UA 。 你現(xiàn)在可以調(diào)用如下函數(shù):
Referrers
接下來你需要設(shè)置的是引用。 一般的規(guī)則是,如果它是一個列表頁面或主頁,那么你可以設(shè)置該國家的 Google 主頁網(wǎng)址。
如果你要抓取各個產(chǎn)品頁面,可以在引用中設(shè)置相關(guān)類別的網(wǎng)址,或者可以找到要抓取的域的反向鏈接。 我通常使用 SEMRush 來這么做。
如果你點擊查看放大的圖像,你可以看到一些鏈接指向我所需的類別。一旦你收集所有這些真實的反向鏈接,你可以通過復(fù)制邏輯 insideget_random_ua()返回隨機引用,并將它們用作引用。 如下所示:
代理IP
我不得不強調(diào)這一點。如果認真研究,那么你必須使用多個代理 IP 來避免阻塞。 大多數(shù)網(wǎng)站會根據(jù)你的服務(wù)器或主機提供商的靜態(tài) IP 來阻止抓取工具。 這些網(wǎng)站使用智能的工具來確定某個 IP 或 IP 池的方式,并簡單地阻止它們。 這也是為什么建議購買幾個 IP 地址,50-100個至少要避免阻塞。有許多可用的服務(wù),但我對 Shaders(現(xiàn)在稱為 OxyLabs )感到滿意。 它們雖然很貴,但服務(wù)質(zhì)量很好。 確保你在訂購多個 IP 時,要求提供隨機 IP 或至少不遵循 1.2.3.4 到 1.2.3.100 等特定模式。站點管理員將很簡單的設(shè)置 IP 地址不全部為 1.2.3.* 。 就這么簡單。
如果你正在使用請求,你可以像下面這樣使用它:
如果你在 Selenium 使用代理 IP ,那么這將有點棘手。
不用說,get_random_proxy() 是返回一個唯一且隨機代理的方法,就像上面獲得唯一且隨機的 UA 和 Referer 一樣。
你可以思考一個這樣的系統(tǒng),在系統(tǒng)中你可以設(shè)置一個 IP 每天或每小時訪問網(wǎng)站頻率,如果它超過了,那么它將被放入一個籠子里直到第二天。 我所在的公司設(shè)計了一個這樣的系統(tǒng),不僅設(shè)置了 IP 訪問頻率,還記錄了哪個 IP 被阻止。 最后,我只是使用代理服務(wù)提供者僅替換這些代理。 由于這超出了本文的范圍,所以我不會詳細介紹它。
Request Heaters
到目前為止,事情你都已經(jīng)做得很好,但是仍然有些狡猾的網(wǎng)站要求你做更多的事情。當你訪問頁面的時候他們會查找特定的請求響應(yīng)頭信息,如果特定的頭信息沒有被發(fā)現(xiàn),他們會阻止內(nèi)容顯示或者展示一個虛假的內(nèi)容。模擬一個你想訪問的網(wǎng)站的請求是非常簡單的。例如,比如你正準備訪問一個 Craigslist URL ,并且想知道哪個頭部信息是需要的。進入 Chrome/Firefox 瀏覽器,檢查正在訪問的頁面,你應(yīng)該會看到下面這些內(nèi)容:
如果你點擊了圖標并查看,你能找到除了 referer 和 user-agent 之外的大量信息。你能一次性全都實現(xiàn)也可以一個個的實現(xiàn)并測試。無論訪問哪個網(wǎng)站,我總是去設(shè)置這些信息。請確保你不只是復(fù)制粘貼這些信息去訪問所有網(wǎng)站,因為這些信息通常會因網(wǎng)站不同而改變。
延遲
在請求之間放置一些延遲總是很好的。我使用 numpy.random.choice() 來實現(xiàn)這一目標,該函數(shù)將在我想延遲的服務(wù)中傳遞隨機數(shù)列表:
如果你還沒有使用過 numpy 庫,你也可以使用 random choice 來達到同樣的目的。
如果你真的很急,那么你可以并行執(zhí)行 URL ,我之前在此文中解釋過了。
結(jié)語
Web 爬蟲被阻塞的不確定性永遠不會變?yōu)榱悖憧偸强梢圆扇∫恍┐胧﹣硪?guī)避它。我討論了一些你應(yīng)該以某種或其他方式在 web 爬蟲中實現(xiàn)的策略。
如果你知道其他策略或技巧,請通過分享評論讓我獲知。一如既往地,期待你的反饋。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-10.29立即報名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價拍賣
- 5 具身智能火了,但規(guī)模落地還需時間
- 6 國產(chǎn)英偉達們,抓緊沖刺A股
- 7 三次錯失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市