Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商资料

news/2025/9/21 18:16:13/文章来源:https://www.cnblogs.com/lxjshuju/p/19103932

文章目录

  • 一、电商数据的作用
    • 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 驱动产品创新,满足用户需求

二、爬取目标

本次的爬取目标是亚马逊电商网站中,苹果最新发布的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.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 CCPC 网络赛

C. 造桥与砍树 魔改 prim。回顾经典的prim算法,从第一个点开始,每次找权值最小的边加入,然后更新到每个点的距离和边的起点,以此往复。对于这道题来讲,每次更新到其他 \(n-1\) 个点的最小权值显然复杂度太大,但按…

安装windows11跳过账户登录

这个最快!!能跳过obbe start ms-cxh:localonlyWindows 11 跳过强制登录微软账户的方法方法1:使用错误的邮箱和密码。比如使用1@1.com,密码随便输入。 方法2:用快捷键“shift+F10”调出CMD命令窗口,输入“star…

TCM安全学院夏季大促与免费网络安全课程发布

TCM安全学院发布安德鲁贝利尼的紧急消息,宣布夏季大促活动,提供网络安全认证和培训折扣,以及新发布的免费网络安全入门课程,适合初学者学习渗透测试和黑客技术。最后听到安德鲁的消息!:face_screaming_in_fear: 点…

博客园插入bilibili视频

默认的<!--第三方:会自动播放--> <iframe src="https://xbeibeix.com/api/bilibili/biliplayer/?url=https://www.bilibili.com/video/BV1Fz4y1f7Wc" scrolling="no" border="0&q…

软件工程第一次编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477这个作业的目标 实…

WO Mic - 免费麦克风

WO Mic可以将您的手机变成电脑麦克风。您无需支付一分钱购买任何设备。如果您选择无线传输,它也是便携的。数百万用户已经安装并每天都在使用它进行通话、录音、语音遥控等活动。 三大组件协同工作以实现这一点:WO M…

AudioRelay —— 让电脑使用手机的麦克风和扬声器

写在前面 总所周知,电脑的麦克风和扬声器一直是很垃圾的水平,和手机相比差了很多,那能不能使用手机的硬件设备来给电脑使用呢,也能省个音箱的钱呢?答案是可以的。那就是使用AudioRelay。前段时间介绍了WO Mic,他…

【小白学算法】矩阵快速幂超详细解析+例题[HDU - 2802]

用于高效解决线性递推问题 前言 在算法竞赛和实际编程中,我们经常遇到需要计算矩阵的高次幂的问题。如果直接用朴素的矩阵乘法来计算,时间复杂度会达到O(n k),其中n是矩阵的维度,k是幂次。当k非常大时(比如\(10^…

lyms 的神秘歌单

关于这个闲话。还有 50 min 就要回 whk 了,我们可以干点什么呢?wy_x and lyms : 写闲话!所以就写。 说实在的根本不知道能写什么。 要不然给自己喜欢的曲子列个列表。 就当是什么神秘歌单了。 update on 9.21 推什么…

大学园区二手书交易强大的平台(代码+数据库+LW)

大学园区二手书交易强大的平台(代码+数据库+LW)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

深入解析:SpringMVC的请求接收与结果响应

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Element UI框架中自定义input组件的placeholder样式

Element UI是基于Vue.js的组件库,提供了一系列的组件,方便在Vue应用程序中快速使用。对于自定义input组件的placeholder样式,可以通过CSS覆盖默认样式来实现。以下是对Element UI中input组件的placeholder样式自定义…

go语言数组的方法

go语言数组的方法 漫思

【C++】类与结构体的区别

区别 技术上 实际上类与结构体在技术层面除了可见性并没有区别,唯一值得一提的区别就是: class类默认情况下其中的变量、函数都为private私有的。 struct结构体默认情况下则都是public公共的。 用法上 何时使用class…

Linux云端服务器上部署Spring Boot应用

在Linux云服务器上部署Spring Boot应用环境准备:确保Java JDK已安装。Spring Boot通常需要Java 8或更高版本。使用 java -version来确认Java版本。 安装Maven(如果是Maven项目)或Gradle(如果是Gradle项目),这取决…

HTML表单验证:确认input元素输入为具有特定整数和小数位数的数值

为了确保HTML表单中的 input元素接收具有特定整数位和小数位数的数值,您需要利用HTML和JavaScript进行前端验证。在HTML5中,可以使用内建的表单验证功能,比如 pattern属性,然而 pattern属性主要用于字符串的正则表…

课前问题思考3

1.什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?什么样的方法应该用static修饰?方法不依赖于类的实例状态。 方法提供的功能与类的实例无关。 工具类方…

实用指南:Docker部署Drawnix开源白板工具

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

go静态方法

go静态方法 漫思

在CentOS上配置SVN至Web目录的自动同步

配置SVN(Subversion)到Web目录的自动同步在CentOS系统中是一种有效的代码部署方法,它可以让团队成员更便捷地管理和发布Web项目。以下是如何在CentOS上实现SVN仓库到Web目录的自动同步的详细步骤。= 1. 安装并配置S…