写点什么

Python 爬虫实战——使用 NetNut 网页解锁器获取亚马逊电商的苹果 AirPods Pro3 商品信息

作者:袁袁袁袁满
  • 2025-09-15
    四川
  • 本文字数:10975 字

    阅读完需:约 36 分钟

一、电商数据的作用

采集电商数据的意义在于通过系统化收集和分析运营中产生的各类信息,为企业提供决策依据、优化业务流程、提升竞争力。其核心作用可简要概括为以下方面:

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:数据中心 IPResidential:住宅 IPStatic Residential:静态住宅 IPMobile:移动 IPWeb 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.text    print(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.text    print(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', '')    # UPC    UPC = 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', '')    # ASIN    ASIN = 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()]    # 创建DataFrame    df = pd.DataFrame(formatted_data)    # 写入excel    df.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_str

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.text print(html_str) return html_str

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', '') # UPC UPC = 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', '') # ASIN ASIN = 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()] # 创建DataFrame df = pd.DataFrame(formatted_data) # 写入excel df.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



用户头像

还未添加个人签名 2022-04-28 加入

还未添加个人简介

评论

发布
暂无评论
Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商的苹果AirPods Pro3商品信息_爬虫_袁袁袁袁满_InfoQ写作社区