文章目录
- 前言
- 工具介绍
- 实战获取网站数据
- 编写代码
- 数据展示
- 推荐
- 总结
前言
当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化,电商不仅从简单的在线购物演变为综合性的购物生态系统,还融合了人工智能、大数据和云计算等先进技术。平台通过精准的用户数据分析,提供个性化的购物体验,优化了商品推荐和服务,显著提升了用户满意度和忠诚度。
在这一过程中,爬虫技术扮演了至关重要的角色。通过自动化的数据抓取,爬虫可以高效地收集竞争对手的产品信息、价格变动和市场趋势,为商家提供宝贵的市场洞察。它不仅帮助商家进行实时的价格调整和库存优化,还支持更精确的市场分析和风险预警,使电商平台在竞争激烈的环境中保持领先地位。
工具介绍
工欲善其事必先利其器。今天给大家推荐的是Proxy302,它是一个专业的全球代理IP
采购平台,提供按需付费的充值方式、最全面的代理类型以及简洁高效的用户界面。我们来展开描述下他的特色。
- 按需付费,无月付套餐:无需套餐捆绑购买,按需付费,充值即可使用所有类型的
代理IP
,无阶梯式定价。 - 最全面
代理
类型:Proxy302提供市面上最全面的代理类型,满足各种业务需求。 -
- 全球240+国家和地区,6500万个
住宅IP
可供选择。
- 全球240+国家和地区,6500万个
-
- Proxy302支持HTTP、SOCKS5网络协议的代理。
-
- Proxy302支持
动态、静态代理
,代理类型分为【动态按流量扣费】
、【动态按IP扣费】
、【静态按流量扣费】
、【静态按IP扣费】
,静态代理还分为住宅IP
、数据中心IP
。
- Proxy302支持
- 简洁易用:用户界面简洁而不简单,易用且高效。提供浏览器扩展插件,实现一键设置代理,省去复杂配置步骤。
福利:点击右上角的调查问卷即可马上获取
$1
测试额度。
实战获取网站数据
这次我们要抓取的是某个知名的购书网站,内容包括:标题、链接、价格和图片链接。为了避免被检测为爬虫,我们首先需要获取登录用户的cookie。登录后,按下F12键,进入“网络”选项,选择任意一个流量记录,在请求头中找到cookie并复制下来。
然后,我们需要分析一下搜索框搜索“华为手机”之后的请求路径。可以从下图中看到,我们点击搜索之后,请求URL为https://search.dangdang.com/?key=%BB%AA%CE%AA%CA%D6%BB%FA&act=input&page_index=1,其中key为“华为手机”的转码,act为动作,page_index代表当前页是第一页。
接着我们需要确认商品元素在页面中的结构。可以观察到,所有商品都位于一个<ul>
标签中,每个商品对应一个<li>
标签,并且都有相应的class标记。
具体来说,标题位于<p>
标签的title属性中,链接在<a>
标签的href属性里,图片链接位于下层的<img>
标签中,价格则位于另一个<p>
标签中。接下来,我们将使用XPath来定位这些标签。
首先我们打开【帮助中心】
点击【快速入门】下的【查看更多】按钮
我们可以看到【非海外环境如何使用代理?】的标题,通过该内容我们了解到有4种实现海外环境的方式。此处阿Q选择使用VPN
的方式进行,简单有效。
选择【静态IP】下的【按IP扣费】选项,选择【购买天数】和【国家】之后点击【生成】按钮即可获取到静态住宅IP。
出现下图即表示获取静态IP成功。
编写代码
拿到静态ip之后我们需要定义 get_html_str 函数,来向电商网站发送搜索请求:先定义请求头,模拟浏览器访问,其中包含了一些cookie信息。然后配置我们的代理信息,包含我们拿到的静态代理IP。最后发送HTTP请求到指定的URL,并返回网页源码。
# 发送请求,获取网页源码
def get_html_str(url):
# 请求头模拟浏览器(注意这里一定添加自己已经登录的cookie才可以)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
'cookie': ''
}
# 添加代理IP,此处是我们刚拿到的静态代理ip
proxies = "";
# proxies = {}
# 添加请求头和代理IP发送请求
response = requests.get(url, headers=headers, proxies=proxies)
# 获取网页源码
html_str = response.text
# 返回网页源码
return html_str
接着我们定义 get_data 函数,来解析网页中的元素,找到目标文本:首先接收网页源码、页码和数据列表作为参数。然后使用lxml.etree解析网页源码,提取商品信息,包括标题、价格、商品链接和图片链接。最后将提取的数据添加到数据列表中。
# 提取数据写入列表
def get_data(html_str, page, data_list):
# 将html字符串转换为etree对象方便后面使用xpath进行解析
html_data = etree.HTML(html_str)
# 利用xpath取到所有的li标签
li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')
# 遍历li_list列表取到某一个商品的对象标签
for li in li_list:
# 标题
title = li.xpath('.//a[@class="pic"]/@title')
title = ''.join(title)
# 商品链接
goods_url = 'https:' + li.xpath('.//a[@class="pic"]/@href')[0]
# 价格
price = li.xpath('.//p[@class="price"]/span[@class="price_n"]/text()')[0]
print(price)
# 图片链接
img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]
print({'页码': page, '标题': title, '价格': price, '商品链接': goods_url,
'图片链接': img_url})
data_list.append(
{'页码': page, '标题': title, '价格': price, '商品链接': goods_url,
'图片链接': img_url})
接下来定义 to_excel 函数,将获取到的结果保存为excel文件:首先将数据列表转换为pandas的DataFrame对象。然后删除DataFrame中的重复数据。最后将DataFrame保存为Excel文件。
# 写入Excel
def to_excel(data_list):
df = pd.DataFrame(data_list)
df.drop_duplicates() # 删除重复数据
df.to_excel('当当采集数据集.xlsx')
最后定义一个main函数方便调节参数、控制流程:首先设置爬取的关键词和页数。然后初始化一个空的数据列表。之后循环遍历每一页,调用get_html_str和get_data函数获取数据。最后调用to_excel函数将数据写入Excel文件。
def main():
# 1. 设置爬取的关键词和页数
keyword = '华为手机'
page_num = 1 # 爬取的页数
data_list = [] # 空列表用于存储数据
for page in range(1, page_num + 1):
url = f'https://search.dangdang.com/?key={keyword}&act=input&page_index={page}'
print(url)
# 2. 获取指定页的网页源码
html_str = get_html_str(url)
# 3. 提取数据
get_data(html_str, page, data_list)
time.sleep(1)
# 4. 写入Excel
to_excel(data_list)
数据展示
以下是我们采集到的华为手机数据
推荐
值得注意的是Proxy302与302.AI是同一个开发团队,302.AI是一个汇集全球顶级品牌的AI超市,按需付费,无月费,全面开放使用各种类型AI。大家有需要可以自行体验!
总结
通过上面的实战,我们可以看到代理服务可以大大提高爬虫的匿名性和效率。Proxy302的代理可以满足这两点需求。
对开发者而言,Proxy302代理以其简单易用的特性,大幅降低了技术门槛。 开发者可以快速上手,无需深入了解代理服务的底层技术细节,即可实现高效的数据抓取。这不仅加快了开发进程,也使得开发者能够将更多精力投入到数据分析和业务逻辑的构建上。
Proxy302以其多维度的优势,为电商平台爬虫的实现提供了强有力的支持。无论是技术实现的便捷性,还是成本控制的灵活性,或是数据质量的高效性,以及整体操作的安全性,亮数据代理都是企业和个人在数据采集领域的理想选择。随着技术的不断进步和市场需求的日益增长,我们可以预见,代理服务将在电商数据采集领域扮演越来越重要的角色。