- 1 引言
- 2 代理IP的優勢
- 3 獲取代理IP賬號
- 4 爬取實戰案例---(某電商網站爬取)
- 4.1 網站分析
- 4.2 編寫代碼
- 4.3 優化代碼
- 5 總結
1 引言
??在數字化時代,數據作為核心資源蘊含重要價值,網絡爬蟲成為企業洞察市場趨勢、學術研究探索未知領域的重要技術手段。然而爬蟲實踐中常面臨技術挑戰,例如某電商企業通過爬蟲獲取競品數據時,因高頻請求觸發目標平臺 IP 封鎖機制導致采集中斷。IP 代理在網絡爬蟲中發揮關鍵作用:通過分布式請求分散訪問壓力,可規避單 IP 高頻訪問限制并突破地域內容獲取限制;同時能隱藏真實 IP 地址降低法律風險,模擬多用戶行為特征優化反爬蟲策略,有效平衡數據獲取需求與網絡訪問規則。這種技術工具通過突破技術限制、提升采集效率、保障數據安全等多維價值,成為網絡爬蟲體系中的重要組成部分。本文將介紹代理IP在網絡爬蟲中的重要性,并結合實際應用。
2 代理IP的優勢
-
強大的架構性能:采用高性能分布式集群架構,具備無限并發能力,不限制并發請求,能完美滿足多終端使用需求,為各類業務穩定運行提供堅實保障。
-
豐富的功能配置:支持多種代理認證模式,同時兼容 HTTP、HTTPS 以及 socks5 協議。還提供 API 接口調用與可視化監控統計功能,為用戶業務開展提供極大便利。
-
優質的資源保障:擁有千萬級優質住宅代理 IP 池,實時更新來自 200 多個國家的真實家庭住宅 IP。這些 IP 具有高效率、低延遲的特點,且能提供超高私密性,有力保障數據安全。
-
個性化的定制服務:兼顧個人和企業用戶的專屬需求,支持根據業務場景定制獨享 IP。 這個團隊提供 24 小時服務與技術支持,全方位滿足用戶多樣化業務需求。
3 獲取代理IP賬號
??這里我們可以選擇進入官網網站,獲取賬號
??在測試前,我們記得實名認證一下,這樣我們就可以享受500M測試的額度了,接下來我們簡單演示一下使用賬密認證的形式獲取代理~
??在獲取代理前,我們首先要創建一下子賬號,這里的用戶名和密碼都要采用字母+數字
??接下來我們就可以獲取代理信息了,前往獲取代理,然后選擇賬密認證。這里選擇所需的地區、子用戶、粘性會話、代理協議以及我們需要的其他參數,我這里默認
?生成代理信息,完成前面的設置后,我們將獲得代理信息。請復制提供的詳細信息并在您的代理軟件中配置使用。
?套餐選擇一般有兩個選項動態住宅代理和靜態住宅代理,當然我相信很多人是不了解這兩個的,這里我簡單的介紹一下
-
動態住宅代理的 IP 地址處于不斷變化之中,這使得它在模擬多樣化用戶行為、規避網站訪問限制等方面表現出色,像網絡爬蟲、廣告驗證等場景常能看到它的身影。其成本往往根據使用量或時長而定,相對較為靈活,價格一般不算高,還能為用戶提供較好的匿名性保護,不過在速度和穩定性上可能會有一些波動。
-
靜態住宅代理有著固定不變的 IP 地址,在速度和穩定性方面更具優勢,適用于對網絡質量要求高的網站測試、電商監控等場景。由于其資源的特殊性,價格通常偏高,而且因為 IP 固定,相對容易被追蹤,匿名性稍弱。
?此外官方還設置了許多使用教程,感興趣的小伙伴可自行查閱!
?接下來讓我們進入爬取實戰環節。
4 爬取實戰案例—(某電商網站爬取)
4.1 網站分析
?這是一個海外電商平臺,今天我想要獲取下面圖中一些信息,這里選取的關鍵詞是:IPhone 16
?接下來我們想要獲取商品的:title、price、link,如何獲取呢,我們可以選擇點擊鍵盤上的F12,之后我們就可以按照下面的示例,進行選中對應的塊了
?這里我們選擇通過soup.find_all(‘div’, class_=‘product-tuple-listing’)來查找所有的商品塊
?每個商品塊包含了:
- 商品名稱:位于
<p class="product-title">
標簽中。 - 商品價格:位于
<span class="lfloat product-price">
標簽中。 - 商品鏈接:位于
<a>
標簽中,包含href
屬性。
?上面是簡單的網站結構分析,下面我們進行實戰
4.2 編寫代碼
- 首先我們需要導入庫,這里我們導入requests和bs4,這兩種庫
requests
是 Python 中一個簡潔且功能強大的 HTTP 庫,用于發送各種 HTTP 請求,使得在 Python 中進行網絡請求變得非常容易。bs4
即BeautifulSoup 4
,是一個用于解析 HTML 和 XML 文檔的 Python 庫,能夠從網頁中提取所需的數據。
import requests
from bs4 import BeautifulSoup
- 其次設置請求頭,如下
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
- 模擬瀏覽器請求。很多網站會根據請求頭來判斷請求是否來自瀏覽器,以防止自動化腳本等的訪問。這里你也可以選擇多設置幾個
-
之后我們確定目標 URL,這里是可以變動的,但是如果變動過大的話,后面對應的結構也得變動
-
獲取頁面的內容,requests.get(url, headers=headers):發送 GET 請求到 Snapdeal 網站,獲取網頁內容。
response.text:獲取返回的 HTML 內容。BeautifulSoup(response.text, ‘html.parser’):使用
BeautifulSoup
解析 HTML 內容。'html.parser'
是解析器,BeautifulSoup
會將 HTML 內容轉換成一個可以通過 Python 代碼進行操作的對象。response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser')
-
定義提取商品信息的函數,這里使用find_all函數
def extract_product_info():products = []product_elements = soup.find_all('div', class_='product-tuple-listing')
這里設置products = []:初始化一個空列表,用來存儲商品信息。
soup.find_all('div', class_='product-tuple-listing')
:通過BeautifulSoup
找到所有符合條件的div
元素,這些div
元素是每個商品的容器。根據頁面的結構,每個商品信息都被包含在一個div
標簽中,其類名為product-tuple-listing
。 -
接下來就是for循環遍歷了
for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p', class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span', class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None
?上面就是整個代碼的核心步驟,下面我給出完整的代碼
import requests
from bs4 import BeautifulSoup# 設置請求頭模仿瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}# 指定 URL,這里用的是你提供的 iPhone 16 搜索頁面鏈接
url = 'https://www.snapdeal.com/search?keyword=iPhone%2016&santizedKeyword=Sony&catId=0&categoryId=0&suggested=false&vertical=p&noOfResults=20&searchState=&clickSrc=go_header&lastKeyword=&prodCatId=&changeBackToAll=false&foundInAll=false&categoryIdSearched=&cityPageUrl=&categoryUrl=&url=&utmContent=&dealDetail=&sort=rlvncy'# 獲取頁面內容
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')# 提取商品的名稱、價格、URL等
def extract_product_info():products = []# 找到包含產品的所有元素product_elements = soup.find_all('div', class_='product-tuple-listing')for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p',class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span',class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None# 僅當所有必要的字段都有時才記錄if title and price and link:product_info = {'title': title,'price': price,'link': f'https://www.snapdeal.com{link}',}products.append(product_info)return products# 獲取并打印產品信息
products = extract_product_info()
for product in products:print(f"Title: {product['title']}")print(f"Price: {product['price']}")print(f"Link: {product['link']}")print("-" * 40)
?下面是運行的結果:
4.3 優化代碼
?接下來我們使用代理再試試,下面是官方為我們提供的關于Demo示例,從代碼來看,還是十分簡潔明了的
import requests
if __name__ == '__main__':
proxyip = "http://username_custom_zone_US:password@us.ipwo.net:7878"
url = "http://ipinfo.io"
proxies = {
'http': proxyip,
}
data = requests.get(url=url, proxies=proxies)
print(data.text)
?接下來我們再根據提供的代碼示例,從而優化我們的代碼,下面是完整的代碼闡述
import requests
from bs4 import BeautifulSoup# 設置請求頭模仿瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}# 設置代理
proxyip = " " # 替換為你自己的ip信息
proxies = {'http': proxyip,
}# 指定 URL,這里用的是你提供的 iPhone 16 搜索頁面鏈接
url = 'https://www.snapdeal.com/search?keyword=iPhone%2016&santizedKeyword=Sony&catId=0&categoryId=0&suggested=false&vertical=p&noOfResults=20&searchState=&clickSrc=go_header&lastKeyword=&prodCatId=&changeBackToAll=false&foundInAll=false&categoryIdSearched=&cityPageUrl=&categoryUrl=&url=&utmContent=&dealDetail=&sort=rlvncy'# 獲取頁面內容,使用代理,禁用 SSL 驗證
response = requests.get(url, headers=headers, proxies=proxies, verify=False) # verify=False 關閉 SSL 驗證
soup = BeautifulSoup(response.text, 'html.parser')# 提取商品的名稱、價格、URL等
def extract_product_info():products = []# 找到包含產品的所有元素product_elements = soup.find_all('div', class_='product-tuple-listing')for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p', class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span', class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None# 僅當所有必要的字段都有時才記錄if title and price and link:product_info = {'title': title,'price': price,'link': f'https://www.snapdeal.com{link}',}products.append(product_info)return products# 獲取并打印產品信息
products = extract_product_info()
for product in products:print(f"Title: {product['title']}")print(f"Price: {product['price']}")print(f"Link: {product['link']}")print("-" * 40)
?下面是運行結果:
5 總結
??通過本文的介紹,我們可以清楚的了解并認識到代理在網絡數據采集是十分重要的,針對snapdeal電商平臺的商品數據采集,發現了IPWO的強大之處,使我們進行網絡數據采集的時候,效率大大的提高~