Python爬虫实战:利用代理IP获取电商数据

文章目录

  • 1.电商数据介绍
  • 2.爬取目标
  • 3.代理IP推荐
  • 4.准备工作
    • 4.1 模块安装
    • 4.2 代理IP获取
  • 5.爬虫代码实战
    • 5.1分析网页
      • 5.1.1 获取cookie
      • 5.1.2 关键词分析
      • 5.1.3 翻页分析
      • 5.1.4 数据获取分析
    • 5.2 发送请求
    • 5.3 提取数据
    • 5.4 保存数据
    • 5.5 完整源码
    • 5.6 数据分析
    • 六、总结

1.电商数据介绍

● 电商数据对于了解用户行为、优化营销策略、提高转化率等方面具有重要作用。

●通过分析用户数据,企业可以找到目标用户,精准投放广告和推广活动,有效提高广告的转化率和投资回报率。

●电商数据还可以用于个性化推荐、营销活动优化、供应链管理等场景,帮助企业提升用户体验和运营效率。

2.爬取目标

本次博主爬取的目标是某东,代码实现输入关键词后翻页获取相关的商品信息,如:标题、价格、评论数、商铺名、商品链接、店铺链接、图片链接:

3.代理IP推荐

由于电商数据量巨大,为了安全快速获取数据,博主使用的是亮数据家的代理IP,质量很高个人感觉还不错,并且可以免费使用:
亮数据代理IP免费试用

4.准备工作

4.1 模块安装

Python:3.10

编辑器:PyCharm

第三方模块,自行安装:

pip install requests # 网页数据爬取
pip install lxml # 提取网页数据
pip install pandas #写入Excel表格

4.2 代理IP获取

1、首先先免费注册一个亮数据账号:亮数据代理IP免费试用

2、选择查看代理IP产品:

3、有动态IP、静态IP、机房IP、移动代理IP可以选择,博主这里选择是机房IP:

4、配置通道,可以设置IP类型(共享/独享)、IP数、IP来源国家等等:

5、配置完成后可以看到主机、用户名和密码,等下我们添加到代码中去获取IP:

6、下面代码只需要修改刚才获取到的主机、用户名和密码,即可返回代理IP:

import re # 正则,用于提取字符串
import pandas as pd # pandas,用于写入Excel文件
import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒def get_ip():"""获取亮数据代理IP"""host = '你的主机' # 主机user_name = '你的用户名' # 用户名password = '你的密码' # 密码proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址proxies = {'http':proxy_url,'https':proxy_url}url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改)response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP# print('代理IP详情信息:',response)response_dict = eval(response)  # 将字符串转为字典,方便我们提取代理IPip =  response_dict['ip']# print('IP:',ip)return ip

5.爬虫代码实战

5.1分析网页

5.1.1 获取cookie

目前某东需要登录后才看得到数据,所以我们需要获取登录后的cookie:

5.1.2 关键词分析

只要在keyword传入我们需要获取的关键词即可:

5.1.3 翻页分析

第一页:

https://search.jd.com/Search?keyword=Python%E4%B9%A6%E7%B1%8&page=1

第二页:

https://search.jd.com/Search?keyword=Python%E4%B9%A6%E7%B1%8&page=2

可以看到是通过page进行控制翻页的。

5.1.4 数据获取分析

首先可以看到我们所需要的每个商品数据都在一个一个li标签下面:

li标签下面有我们所需要的全部数据:

数据没问题接下来我们就可以开始写代码了

5.2 发送请求

1、设置关键词和翻页拼接网页链接:

def main():keyword = '手机'page_num = 10 # 爬取的页数for page in range(1,page_num+1):url = f'https://search.jd.com/Search?keyword={keyword}&page={page}'

2、获取网页源代码,注意:下面代码需要看4.2获取并添加代理IP信息(主机、用户名和密码 )和看5.1.1添加自己的cookie

import re # 正则,用于提取字符串
import pandas as pd # pandas,用于写入Excel文件
import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒def get_ip():host = '' # 主机user_name = '' # 用户名password = '' # 密码proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址proxies = {'http':proxy_url,'https':proxy_url}url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改)response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP# print('代理IP详情信息:',response)response_dict = eval(response)  # 将字符串转为字典,方便我们提取代理IPip =  response_dict['ip']# print('IP:',ip)return ipdef 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这里需要看`5.1 获取代理IP`自己去获取,博主的已过期)proxies = get_ip()# 添加请求头和代理IP发送请求response = requests.get(url,headers=headers,proxies=proxies) # # 获取网页源码html_str = response.content.decode()# 返回网页源码return html_strdef main():keyword = '手机'page_num = 1 # 爬取的页数for page in range(1,page_num+1):url = f'https://search.jd.com/Search?keyword={keyword}&page={page}'print(url)html_str = get_html_str(url)print(html_str)if __name__ == '__main__':main()

3、运行成功翻页网页数据:

5.3 提取数据

下面代码实现提取相关的商品信息,如:标题、价格、评论数(获取失败大家可以自行尝试一下)、商铺名、商品链接、店铺链接、图片链接:

def get_data(html_str,page, data_list):"""提取数据写入列表"""# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath("//ul[@class='gl-warp clearfix']/li")# 打印一下li标签个数# print(len(li_list))# 遍历li_list列表取到某一个商品的对象标签for li in li_list:# 标题try:title = li.xpath(".//div[@class='p-name p-name-type-2']/a/em//text()")title = ''.join(title)except:title = None# 商品链接try:goods_url = 'https:' +li.xpath(".//div[@class='p-name p-name-type-2']/a/@href")[0]except:goods_url= None# 价格try:price = li.xpath(".//div[@class='p-price']/strong/i/text()")[0]except:price= None# 评论数,有问题获取不到try:comment_num = li.xpath(".//div[@class='p-commit']/strong/a/text()")[0]except:comment_num= None# 店铺名try:shop = li.xpath(".//div[@class='p-shop']/span/a/text()")[0]except:shop = None# 店铺链接try:shop_url = 'https:' + li.xpath(".//div[@class='p-shop']/span[@class='J_im_icon']/a[@class='curr-shop hd-shopname']/@href")[0]except:shop_url = None# 图片链接try:img_url = 'https:' + li.xpath(".//div[@class='p-img']/a/img/@data-lazy-img")[0].replace('.avif','')except:img_url = Noneprint({'页码':page,'标题':title,'价格':price,'评论数':comment_num,'店铺名':shop,'店铺链接':shop_url,'商品链接':goods_url,'图片链接':img_url})data_list.append({'页码':page,'标题':title,'价格':price,'评论数':comment_num,'店铺名':shop,'店铺链接':shop_url,'商品链接':goods_url,'图片链接':img_url})

运行成功:

5.4 保存数据

将获取到的数据写入Excel:

def to_excel(data_list):"""写入Excel"""df = pd.DataFrame(data_list)df.drop_duplicates() # 删除重复数据df.to_excel('京东采集数据集.xlsx')

5.5 完整源码

下面完整代码需要看4.2获取并添加代理IP信息(主机、用户名和密码 )和看5.1.1添加自己的cookie,可以修改关键词和爬取的页数:

import re # 正则,用于提取字符串
import pandas as pd # pandas,用于写入Excel文件
import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒def get_ip():"""获取亮数据代理IP"""host = '你的主机' # 主机user_name = '你的用户名' # 用户名password = '你的密码' # 密码proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址proxies = {'http':proxy_url,'https':proxy_url}url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改)response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP# print('代理IP详情信息:',response)response_dict = eval(response)  # 将字符串转为字典,方便我们提取代理IPip =  response_dict['ip']# print('IP:',ip)return ipdef 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':'你的京东登录cookie'}# 添加代理IP(这里代理IP这里需要看`5.1 获取代理IP`自己去获取,博主的已过期)proxies = get_ip()# 添加请求头和代理IP发送请求response = requests.get(url,headers=headers,proxies=proxies) ## 获取网页源码html_str = response.content.decode()# 返回网页源码return html_strdef get_data(html_str,page, data_list):"""提取数据写入列表"""# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath("//ul[@class='gl-warp clearfix']/li")# 打印一下li标签个数# print(len(li_list))# 遍历li_list列表取到某一个商品的对象标签for li in li_list:# 标题try:title = li.xpath(".//div[@class='p-name p-name-type-2']/a/em//text()")title = ''.join(title)except:title = None# 商品链接try:goods_url = 'https:' +li.xpath(".//div[@class='p-name p-name-type-2']/a/@href")[0]except:goods_url= None# 价格try:price = li.xpath(".//div[@class='p-price']/strong/i/text()")[0]except:price= None# 评论数,有问题获取不到try:comment_num = li.xpath(".//div[@class='p-commit']/strong/a/text()")[0]except:comment_num= None# 店铺名try:shop = li.xpath(".//div[@class='p-shop']/span/a/text()")[0]except:shop = None# 店铺链接try:shop_url = 'https:' + li.xpath(".//div[@class='p-shop']/span[@class='J_im_icon']/a[@class='curr-shop hd-shopname']/@href")[0]except:shop_url = None# 图片链接try:img_url = 'https:' + li.xpath(".//div[@class='p-img']/a/img/@data-lazy-img")[0].replace('.avif','')except:img_url = Noneprint({'页码':page,'标题':title,'价格':price,'评论数':comment_num,'店铺名':shop,'店铺链接':shop_url,'商品链接':goods_url,'图片链接':img_url})data_list.append({'页码':page,'标题':title,'价格':price,'评论数':comment_num,'店铺名':shop,'店铺链接':shop_url,'商品链接':goods_url,'图片链接':img_url})def to_excel(data_list):"""写入Excel"""df = pd.DataFrame(data_list)df.drop_duplicates() # 删除重复数据df.to_excel('京东采集数据集.xlsx')def main():# 1. 设置爬取的关键词和页数keyword = '手机'page_num = 10 # 爬取的页数data_list = [] # 空列表用于存储数据for page in range(1,page_num+1):url = f'https://search.jd.com/Search?keyword={keyword}&page={page}'print(url)# 2. 获取指定页的网页源码html_str = get_html_str(url)print(html_str)# 3. 提取数据get_data(html_str,page, data_list)time.sleep(1)# 4. 写入Excelto_excel(data_list)if __name__ == '__main__':main()

运行结果:

5.6 数据分析

博主这里获取10页数据,手机价格最多的是1099元的手机,如下图所示:

还可以分析店铺、品牌、价格分布区间等等,大家可以自行尝试。

六、总结

代理IP对于爬虫是密不可分的,但使用代理IP需要遵守相关法律法规和目标网站的使用规则,不得进行非法活动或滥用代理IP服务,亮数据家的高质量代理IP可以帮助爬虫安全采集公开数据信息,有需要代理IP的小伙伴可以试试:亮数据代理IP免费试用

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

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

相关文章

解决问题的多样手段:不止律师

在我们日常生活和工作中,总是会遇到各种各样的问题。有时我们会不由自主地想到找律师打官司,认为这是解决问题的唯一途径。然而,解决问题其实有很多手段,律师和法庭只是其中的一种。事实上,只要能够发现问题并及时解决…

Spring Boot中@Value加载配置的替代者:@ConfigurationProperties

Value注解Spring Boot开发者都已经熟悉了,通过该注解,我们可以快速的把配置信息加载到Spring的Bean中。 例如:在application.yml中添加了一个配置如下: 我想在service中获取name,通过value注解方式实现,代…

人力资源管理信息化系统如何支持企业开展管理诊断?

华恒智信人力资源顾问有限公司致力于帮助企业开展人力资源管理方面的各项提升改进工作,在长期的咨询工作中,最常听到企业提到的问题莫过于管理诊断方面的问题,事实上,很多企业在日常工作中,都意识到企业内部存在管理方…

比例溢流阀的放大器找BEUEC

液压比例放大器的使用范围广泛,包括工业生产线、船舶液压系统等多个领域。BEUEC比例放大器是一种重要的液压系统组件,其作用是将微弱的液压信号放大,以实现对液压系统的精确控制。这种设备在多个行业中都有广泛的应用,特别是在需要…

C++ List完全指南:使用方法与自定义实现

文章目录 list的使用几种构造函数 list的实现1.节点类的定义1.1节点类的构造函数 2.正向迭代器实现2.1operator*重载2.2operator->重载2.3operator重载2.4operator--2.5operator和operator! 3.反向迭代器实现3.1operator*重载3.2operator->重载3.3operator重载…

解决Vue3+TS+vite,VSCode 高亮语法错误

一般像这种提示,有可能就是TypeScript语法的识别问题, 一般我们重装一下Vue - Official插件 或者将tcconfig.json中的moduleResolution改为node模式, 基本都是TypeScript无法识别vue文件中的TypeScript语句导致的

照片处理软件哪个好?爆款图片编辑工具分享

照片处理软件哪个好?在数字时代,照片处理软件已经成为我们日常生活和工作中不可或缺的工具。无论是为了美化照片、修复旧照,还是进行专业的图像处理,都有各种软件可以满足我们的需求。以下是一些值得一试的照片处理软件&#xff0…

win10和win11修改暂停更新时间

关于Windows的自动更新,可以说是有人喜欢,也有人讨厌。部分小伙伴觉得,自动更新能让系统时刻保持最新状态,提高安全性。但也有用户认为,频繁的自动更新很耽误事,有时还会带来意想不到的BUG。 零副作用关闭…

ChatGPT-4o模型功能介绍——还没用过的看过来

1.概述 OpenAI 持续突破人工智能的边界,推出了其最新模型 ChatGPT-4o,作为 ChatGPT-4 的继承者,该模型有望带来显著的提升和创新功能。本文将深入解析 ChatGPT-4 与 ChatGPT-4o 之间的区别,并探讨它们的功能、性能以及潜在的应用…

Web上机:JSP+Servlet+JDBC的交互流程

目录 需求与设计 基础需求: 项目结构: 项目逻辑: 运行图示: 代码实现 Login.jsp InsertServlet SelectServlet Table.jsp user mysql表结构 Web开发技术迭代速度日新月异,对于技术的更新往往是基于底层一…

路径规划 | 图解粒子群(PSO)算法(附ROS C++仿真)

目录 0 专栏介绍1 从鸟群迁徙说起2 粒子群算法基本概念3 粒子群算法流程4 粒子群算法ROS实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规…

Midjourney 推出Style Tuner工具 ,统一风格,提升创作效率!

Midjourney 由前 Magic Leap 程序员大卫 - 霍尔茨(David Holz)构思,于 2022 年夏天推出,在独立消息应用 Discord 的服务器上吸引了超过 1600 万用户,并由一个小规模的程序员团队不断更新,推出了包括平移、扩…

【openlayers系统学习】00官网的Workshop介绍

00Workshop介绍 官方文档:https://openlayers.org/workshop/en/ openlayers官网Workshop学习。 通过官网Workshop,系统学习openlayers的使用。 基本设置 这些说明假定您从最新Workshop版本的 openlayers-workshop-en.zip​ 文件开始。此外&#xff…

AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用

系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6:掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

实验五:实现循环双链表各种基本运算的算法

实验五:实现循环双链表各种基本运算的算法 一、实验目的与要求 目的:领会循环双链表存储结构和掌握循环双链表中各种基本运算算法设计。 内容:编写一个程序cdinklist.cpp,实现循环双链表的各种基本运算和整体建表算法(假设循环双链表的元素类型ElemType为char),并…

俄罗斯半导体领域迈出坚实步伐:首台光刻机诞生,目标直指7纳米工艺

近日,国外媒体纷纷报道,俄罗斯在半导体技术领域取得了重要突破,首台光刻机已经制造完成并正在进行严格的测试阶段。这一里程碑式的事件标志着俄罗斯在自主发展半导体技术的道路上迈出了坚实的一步。 据俄罗斯联邦工业和贸易部副部长瓦西里-什…

【源码】2024心悦搜剧源码百万级网盘资源

1、一键转存他人链接:就是将别人的分享链接转为你自己的 2、转存心悦搜剧资源:就是将心悦搜剧平台上的所有资源都转成你自己的 3、每日自动更新:自动转存每天的资源并入库 前端uin-app,后端PHP,兼容微信小程序

【VTKExamples::Utilities】第一期 动画模拟Animation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Animation,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Animation 该样例介绍如…

【设计模式深度剖析】【4】【结构型】【组合模式】| 以文件系统为例加深理解

👈️上一篇:适配器模式 设计模式深度剖析-专栏👈️ 目 录 组合模式定义英文原话直译如何理解? 3个角色UML类图代码示例 组合模式的优点组合模式的使用场景示例解析:文件系统 组合模式 组合模式(Composite Pattern&a…

多段图最短路径(动态规划法)

目录 前言 一、多段图的分析 二、算法思路 三、代码如下: 总结 前言 问题描述:设图G(V, E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得对于E中的任何一条边(u, v),必有u∈Vi&…