文章目錄
- 一、電商數據的作用
- 1.1 支撐科學決策,降低試錯成本
- 1.2 提升運營效率,實現降本增效
- 1.3 深化用戶理解,驅動個性化服務
- 1.4 監測競品動態,制定差異化策略
- 1.5 驅動產品創新,滿足用戶需求
- 二、爬取目標
- 三、環境準備
- 四、NetNut網頁解鎖器介紹
- 4.1 特點
- 4.2 免費申請
- 五、使用網頁解鎖器實戰
- 5.1 導入模塊
- 5.2 發送請求獲取網頁源碼
- 5.3 解析數據
- 5.4 保存數據
- 5.5 完整源碼
- 5.6 結果展示
- 六、總結
一、電商數據的作用
采集電商數據的意義在于通過系統化收集和分析運營中產生的各類信息,為企業提供決策依據、優化業務流程、提升競爭力。其核心作用可簡要概括為以下方面:
1.1 支撐科學決策,降低試錯成本
- 市場洞察:通過采集行業趨勢、競品動態、用戶需求等數據,幫助企業避開“拍腦袋”決策,制定符合市場規律的戰略。
- 定價優化:分析競品價格、用戶價格敏感度,動態調整定價策略,平衡銷量與利潤。
1.2 提升運營效率,實現降本增效
- 供應鏈優化:基于銷售預測和庫存數據,實現“以銷定產”,減少積壓或缺貨風險。
- 物流優化:通過訂單分布和配送路徑數據,縮短配送時間,降低物流成本。
1.3 深化用戶理解,驅動個性化服務
- 用戶畫像構建:采集瀏覽、購買、評價等行為數據,精準定位用戶需求,實現個性化推薦和精準營銷。
- 體驗提升:分析用戶反饋和客服數據,優化產品功能和服務流程,增強用戶粘性。
1.4 監測競品動態,制定差異化策略
- 競品分析:實時跟蹤競品價格、促銷活動、營銷策略,快速響應市場變化,避免同質化競爭。
- 機會挖掘:通過競品數據發現市場空白點,為產品創新或細分市場拓展提供方向。
1.5 驅動產品創新,滿足用戶需求
- 反饋閉環:通過用戶評價、退貨原因等數據,發現產品痛點,指導產品迭代和功能優化。
- C2M定制:基于用戶需求數據反向定制產品,降低庫存風險,提升市場響應速度。
二、爬取目標
本次的爬取目標是亞馬遜電商網站中,蘋果最新發布的AirPods Pro3商品信息,字段如下:商品標題、價格、品牌、顏色、耳部放置、外型規格、噪音控制、型號名稱、連接技術、無線通信技術、隨附部件、商品具體用途、產品的推薦用途、兼容的設備、控制類型、線纜特征、防水級別、控制方法、商品數量、控制器類型、UPC、特殊功能、制造商、包裝尺寸、商品重量、ASIN、型號、電池、上架時間、箱內物品:
三、環境準備
Python:3.10
編輯器:PyCharm
第三方模塊,自行安裝:
pip install requests # 爬蟲模塊
pip install lxml # 解析網頁模塊
pip install pandas # 數據處理模塊
四、NetNut網頁解鎖器介紹
4.1 特點
1、先進的反反爬蟲技術:有效繞過網站實施的反抓取措施
2、自動輪換IP管理:根據網站復雜程度動態輪換IP地址
3、驗證碼解決能力:解決驗證碼,模仿真實用戶行為
4、自定義 HTTP 標頭管理:適應特定于站點的要求以提高抓取效率
4.2 免費申請
1、打開官網選擇注冊(Netnut代理IP):
2、注冊登錄好以后來到控制面板,切換語言為中文:
3、點擊集成示例:
4、產品有五種可以供我們選擇,這里我們用Web Unblocker(網頁解鎖器)進行測試:
Datacenter:數據中心IP
Residential:住宅IP
Static Residential:靜態住宅IP
Mobile:移動IP
Web Unblocker:網頁解鎖器
5、一共有100多個國家代理地址可以供我們選擇,可以滿足各種跨國業務需求,真的太棒了:
6、選擇Python代碼進行復制,后續替換代碼中的用戶名和密碼即可:
7、封裝為一個函數方便調用,注意這里需要替換為你自己的NetNut代理用戶名和密碼:
def get_ip():proxies = {"http": "http://你的用戶名:你的密碼@unblocker.netnut.io:5959","https": "http://你的用戶名:你的密碼@unblocker.netnut.io:5959"}return proxies
五、使用網頁解鎖器實戰
5.1 導入模塊
import requests # python基礎爬蟲庫
from lxml import etree # 可以將網頁轉換為Elements對象
import pandas as pd # pandas,用于寫入Excel文件
5.2 發送請求獲取網頁源碼
(1)我們先來試試不使用網頁解鎖器發送請求:
def get_html_str(url):"""不使用網頁解鎖器"""headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.559.400 QQBrowser/19.6.6683.400'}response = requests.get(url, headers=headers, verify=False)html_str = response.textprint(html_str)return html_str
可以看到返回的網頁源碼特別短,且沒有我們需要的數據,這是因為亞馬遜電商網站有反爬蟲措施識別到了我們的爬蟲代碼:
(2)我們攜帶網頁解鎖器發送請求獲取網頁源碼:
def get_html_str(url):headers = {'x-netnut-html-render': 'true'}# 使用網頁解析器proxies = get_ip()response = requests.get(url, headers=headers,proxies=proxies, verify=False) #html_str = response.textprint(html_str)return html_str
可以看到返回的網頁源碼特別長,并且可以搜到我們需要的數據,NetNut網頁解鎖器簡直太強了,可以有效解決請求頭檢測、IP檢測、驗證碼檢測等,可以模仿真實用戶行為進行訪問:
5.3 解析數據
我們這里寫一個get_data(html_str)函數,傳入當前頁的網頁源碼,然后用xpath解析數據:
def get_data(html_str):# 將html字符串轉換為etree對象方便后面使用xpath進行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li標簽# 標題title = html_data.xpath('//span[@id="productTitle"]/text()')[0].strip()# 價格price = html_data.xpath('//span[@class="a-price-whole"]/text()')[0].strip()price = '$' + price# 品牌Brand = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[1]/td[2]/span/text()')[0].strip()# 顏色Color = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[2]/td[2]/span/text()')[0].strip()# 耳部放置Ear_Placement = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[3]/td[2]/span/text()')[0].strip()# 外型規格Form_Factor = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[4]/td[2]/span/text()')[0].strip()# 噪音控制Noise_Control = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[5]/td[2]/span/text()')[0].strip()# 型號名稱Model_Name = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[1]/td/text()')Model_Name = Model_Name[0].strip().replace('\u200e','')# 連接技術Connectivity_Technology = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[2]/td/text()')Connectivity_Technology = Connectivity_Technology[0].strip().replace('\u200e', '')# 無線通信技術Wireless_Communication_Technology = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[3]/td/text()')Wireless_Communication_Technology = Wireless_Communication_Technology[0].strip().replace('\u200e', '')# 隨附部件Included_Components = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[4]/td/text()')Included_Components = Included_Components[0].strip().replace('\u200e', '')# 商品具體用途Specific_Uses_For_Product = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[5]/td/text()')Specific_Uses_For_Product = Specific_Uses_For_Product[0].strip().replace('\u200e', '')# 產品的推薦用途Recommended_Uses_For_Product = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[6]/td/text()')Recommended_Uses_For_Product = Recommended_Uses_For_Product[0].strip().replace('\u200e', '')# 兼容的設備Compatible_Devices = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[7]/td/text()')Compatible_Devices = Compatible_Devices[0].strip().replace('\u200e', '')# 控制類型Control_Type = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[8]/td/text()')Control_Type = Control_Type[0].strip().replace('\u200e', '')# 線纜特征Cable_Feature = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[9]/td/text()')Cable_Feature = Cable_Feature[0].strip().replace('\u200e', '')# 防水級別Water_Resistance_Level = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[10]/td/text()')Water_Resistance_Level = Water_Resistance_Level[0].strip().replace('\u200e', '')# 控制方法Control_Method = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[11]/td/text()')Control_Method = Control_Method[0].strip().replace('\u200e', '')# 商品數量Number_of_Items = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[12]/td/text()')Number_of_Items = Number_of_Items[0].strip().replace('\u200e', '')# 控制器類型Controller_Type = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[13]/td/text()')Controller_Type = Controller_Type[0].strip().replace('\u200e', '')# UPCUPC = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[14]/td/text()')UPC = UPC[0].strip().replace('\u200e', '')# 特殊功能Special_Feature = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[15]/td/text()')Special_Feature = Special_Feature[0].strip().replace('\u200e', '')# 制造商Manufacturer = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[16]/td/text()')Manufacturer = Manufacturer[0].strip().replace('\u200e', '')# 包裝尺寸Package_Dimensions = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[17]/td/text()')Package_Dimensions = Package_Dimensions[0].strip().replace('\u200e', '')# 商品重量Item_Weight = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[18]/td/text()')Item_Weight = Item_Weight[0].strip().replace('\u200e', '')# ASINASIN = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[19]/td/text()')ASIN = ASIN[0].strip().replace('\u200e', '')# 型號Item_model_number = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[20]/td/text()')Item_model_number = Item_model_number[0].strip().replace('\u200e', '')# 電池Batteries = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[21]/td/text()')Batteries = Batteries[0].strip().replace('\u200e', '')# 上架時間Date_First_Available = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[22]/td/text()')Date_First_Available = Date_First_Available[0].strip().replace('\u200e', '')return {'商品標題':title,'價格':price,'品牌':Brand,'顏色':Color,'耳部放置':Ear_Placement,'外型規格':Form_Factor,'噪音控制':Noise_Control,'型號名稱': Model_Name, '連接技術': Connectivity_Technology,'無線通信技術': Wireless_Communication_Technology, '隨附部件': Included_Components,'商品具體用途': Specific_Uses_For_Product, '產品的推薦用途': Recommended_Uses_For_Product,'兼容的設備': Compatible_Devices,'控制類型': Control_Type, '線纜特征': Cable_Feature, '防水級別': Water_Resistance_Level,'控制方法': Control_Method, '商品數量': Number_of_Items,'控制器類型': Controller_Type, 'UPC': UPC, '特殊功能': Special_Feature, '制造商': Manufacturer,'包裝尺寸': Package_Dimensions,'商品重量': Item_Weight, 'ASIN': ASIN, '型號': Item_model_number, '電池': Batteries,'上架時間': Date_First_Available}
5.4 保存數據
將獲取到的數據寫入Excel,當然如果你有數據庫也可以寫入數據庫:
def save_excel(data):# 轉換為適合DataFrame的格式formatted_data = [{'字段': key, '內容': value} for key, value in data.items()]# 創建DataFramedf = pd.DataFrame(formatted_data)# 寫入exceldf.to_excel('電商數據.xlsx',index=False)
5.5 完整源碼
注意:下面get_ip()函數,需要看4.2教程換成自己的NetNut代理的用戶名和密碼:
import requests # python基礎爬蟲庫
from lxml import etree # 可以將網頁轉換為Elements對象
import pandas as pd # pandas,用于寫入Excel文件def get_ip():proxies = {"http": "http://你的用戶名:你的密碼@unblocker.netnut.io:5959","https": "http://你的用戶名:你的密碼@unblocker.netnut.io:5959"}return proxies# def get_html_str(url):
# """不使用網頁解鎖器"""
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.559.400 QQBrowser/19.6.6683.400'
# }
# response = requests.get(url, headers=headers, verify=False)
# html_str = response.text
# print(html_str)
# return html_strdef get_html_str(url):"""使用網頁解鎖器"""headers = {'x-netnut-html-render': 'true'}# 使用網頁解析器proxies = get_ip()response = requests.get(url, headers=headers, proxies=proxies, verify=False)html_str = response.textprint(html_str)return html_strdef get_data(html_str):# 將html字符串轉換為etree對象方便后面使用xpath進行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li標簽# 標題title = html_data.xpath('//span[@id="productTitle"]/text()')[0].strip()# 價格price = html_data.xpath('//span[@class="a-price-whole"]/text()')[0].strip()price = '$' + price# 品牌Brand = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[1]/td[2]/span/text()')[0].strip()# 顏色Color = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[2]/td[2]/span/text()')[0].strip()# 耳部放置Ear_Placement = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[3]/td[2]/span/text()')[0].strip()# 外型規格Form_Factor = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[4]/td[2]/span/text()')[0].strip()# 噪音控制Noise_Control = html_data.xpath('/html/body/div[2]/div/div/div[12]/div[45]/div/table/tbody/tr[5]/td[2]/span/text()')[0].strip()# 型號名稱Model_Name = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[1]/td/text()')Model_Name = Model_Name[0].strip().replace('\u200e','')# 連接技術Connectivity_Technology = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[2]/td/text()')Connectivity_Technology = Connectivity_Technology[0].strip().replace('\u200e', '')# 無線通信技術Wireless_Communication_Technology = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[3]/td/text()')Wireless_Communication_Technology = Wireless_Communication_Technology[0].strip().replace('\u200e', '')# 隨附部件Included_Components = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[4]/td/text()')Included_Components = Included_Components[0].strip().replace('\u200e', '')# 商品具體用途Specific_Uses_For_Product = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[5]/td/text()')Specific_Uses_For_Product = Specific_Uses_For_Product[0].strip().replace('\u200e', '')# 產品的推薦用途Recommended_Uses_For_Product = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[6]/td/text()')Recommended_Uses_For_Product = Recommended_Uses_For_Product[0].strip().replace('\u200e', '')# 兼容的設備Compatible_Devices = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[7]/td/text()')Compatible_Devices = Compatible_Devices[0].strip().replace('\u200e', '')# 控制類型Control_Type = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[8]/td/text()')Control_Type = Control_Type[0].strip().replace('\u200e', '')# 線纜特征Cable_Feature = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[9]/td/text()')Cable_Feature = Cable_Feature[0].strip().replace('\u200e', '')# 防水級別Water_Resistance_Level = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[10]/td/text()')Water_Resistance_Level = Water_Resistance_Level[0].strip().replace('\u200e', '')# 控制方法Control_Method = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[11]/td/text()')Control_Method = Control_Method[0].strip().replace('\u200e', '')# 商品數量Number_of_Items = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[12]/td/text()')Number_of_Items = Number_of_Items[0].strip().replace('\u200e', '')# 控制器類型Controller_Type = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[13]/td/text()')Controller_Type = Controller_Type[0].strip().replace('\u200e', '')# UPCUPC = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[14]/td/text()')UPC = UPC[0].strip().replace('\u200e', '')# 特殊功能Special_Feature = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[15]/td/text()')Special_Feature = Special_Feature[0].strip().replace('\u200e', '')# 制造商Manufacturer = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[16]/td/text()')Manufacturer = Manufacturer[0].strip().replace('\u200e', '')# 包裝尺寸Package_Dimensions = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[17]/td/text()')Package_Dimensions = Package_Dimensions[0].strip().replace('\u200e', '')# 商品重量Item_Weight = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[18]/td/text()')Item_Weight = Item_Weight[0].strip().replace('\u200e', '')# ASINASIN = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[19]/td/text()')ASIN = ASIN[0].strip().replace('\u200e', '')# 型號Item_model_number = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[20]/td/text()')Item_model_number = Item_model_number[0].strip().replace('\u200e', '')# 電池Batteries = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[21]/td/text()')Batteries = Batteries[0].strip().replace('\u200e', '')# 上架時間Date_First_Available = html_data.xpath('/html/body/div[2]/div/div/div[97]/div/div/div/div/div/div[1]/div[1]/div/div[2]/div/div/table/tbody/tr[22]/td/text()')Date_First_Available = Date_First_Available[0].strip().replace('\u200e', '')return {'商品標題':title,'價格':price,'品牌':Brand,'顏色':Color,'耳部放置':Ear_Placement,'外型規格':Form_Factor,'噪音控制':Noise_Control,'型號名稱': Model_Name, '連接技術': Connectivity_Technology,'無線通信技術': Wireless_Communication_Technology, '隨附部件': Included_Components,'商品具體用途': Specific_Uses_For_Product, '產品的推薦用途': Recommended_Uses_For_Product,'兼容的設備': Compatible_Devices,'控制類型': Control_Type, '線纜特征': Cable_Feature, '防水級別': Water_Resistance_Level,'控制方法': Control_Method, '商品數量': Number_of_Items,'控制器類型': Controller_Type, 'UPC': UPC, '特殊功能': Special_Feature, '制造商': Manufacturer,'包裝尺寸': Package_Dimensions,'商品重量': Item_Weight, 'ASIN': ASIN, '型號': Item_model_number, '電池': Batteries,'上架時間': Date_First_Available}def save_excel(data):# 轉換為適合DataFrame的格式formatted_data = [{'字段': key, '內容': value} for key, value in data.items()]# 創建DataFramedf = pd.DataFrame(formatted_data)# 寫入exceldf.to_excel('電商數據.xlsx',index=False)if __name__ == '__main__':url = 'https://www.amazon.com/gp/aw/d/B0FQFB8FMG/?_encoding=UTF8&pd_rd_plhdr=t&aaxitk=2c961813ca337245359ad083c19b8f5f&hsa_cr_id=0&qid=1757486466&sr=1-1-9e67e56a-6f64-441f-a281-df67fc737124&ref_=sbx_be_s_sparkle_lsi4d_asin_0_img&pd_rd_w=AqboJ&content-id=amzn1.sym.9f2b2b9e-47e9-4764-a4dc-2be2f6fca36d%3Aamzn1.sym.9f2b2b9e-47e9-4764-a4dc-2be2f6fca36d&pf_rd_p=9f2b2b9e-47e9-4764-a4dc-2be2f6fca36d&pf_rd_r=6HKX09G15YB6TRQAMP8J&pd_rd_wg=MziL3&pd_rd_r=2ee0b16d-b4ad-422e-a768-b3e26a6d8724'# 一、發送請求,獲取網頁源碼html_str = get_html_str(url)# 二、解析數據data = get_data(html_str)# 三、保存數據save_excel(data)
5.6 結果展示
使用NetNut網頁解鎖器輕松獲取到數據,并且在當前路徑下生成Excel文件:
六、總結
代理對于爬蟲是密不可分的,但使用代理需要遵守相關法律法規和目標網站的使用規則。NetNut代理覆蓋全球195個國家,8500萬優質IP,全方位滿足網頁數據抓取。提供四種代理IP服務:動態住宅,靜態ISP,移動代理,數據中心代理,憑借網頁解鎖器的強大功能可以采集各種場景的數據,并且現在在做國慶促銷有需要的小伙伴們可以試試:Netnut代理IP