在数据驱动的商业时代,数据就是最宝贵的资源。对于电商从业者、市场分析师而言,从京东这类大型电商平台获取商品信息,能够为市场调研、竞品分析、销售策略制定提供重要依据。今天,就来分享如何用Python实现京东商品信息的海量获取。

 

一、准备工作

(一)环境搭建

首先,确保你的电脑安装了Python 3.x版本。Python 3在语法简洁性、性能优化以及对新特性的支持上更胜一筹。安装完成后,还要为Python配置好环境变量,让系统能够顺利识别Python命令。

接下来是安装第三方库,这是实现爬虫功能的关键。通过pip命令,可以轻松安装所需的库:

 

-  requests :用于发送HTTP请求,与京东服务器进行通信,获取网页内容。

-  BeautifulSoup :负责解析HTML页面,将杂乱的网页代码转化为结构化的数据,方便我们提取所需信息。

-  pandas :强大的数据处理和分析库,能将爬取到的数据整理成规范的表格形式,便于后续分析和存储。

-  time :控制请求间隔时间,避免因请求过于频繁而触发京东的反爬机制。

-  random :生成随机数,结合 time 库,实现更灵活的请求间隔设置,让爬虫行为更接近真实用户。

安装命令如下:

 

pip install requests beautifulsoup4 pandas time random

 

 

(二)分析网页结构

 

在编写代码前,要深入了解京东商品页面的结构。打开京东网站,输入目标商品关键词,比如“笔记本电脑”,进入商品搜索结果页面。按下F12键,调出浏览器的开发者工具,通过“Elements”选项卡,查看页面的HTML代码。

仔细观察可以发现,商品的名称、价格、销量、评价等信息都包含在特定的HTML标签和类名中。例如,商品名称可能在 <div class="p-name"> 标签内,价格在 <div class="p-price"> 标签内。掌握这些标签和类名的规律,是精准提取商品信息的基础。

 

(三)构造请求头

 

京东作为大型电商平台,有着严格的反爬机制。为了让爬虫顺利获取数据,需要构造合理的请求头,伪装成真实用户的访问行为。请求头中, User - Agent 字段尤为重要,它标识了访问客户端的信息,包括浏览器类型、版本、操作系统等。我们可以在网上搜索常见的 User - Agent ,然后随机选择一个进行设置,模拟不同用户的访问:

 

import random

 

user_agents = [

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",

    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",

    # 更多User - Agent

]

 

headers = {

    "User - Agent": random.choice(user_agents)

}

 

 

二、代码实现

 

(一)发送请求获取页面内容

 

使用 requests 库向京东商品页面发送GET请求,获取网页的HTML内容:

 

import requests

 

url = "https://search.jd.com/Search?keyword=笔记本电脑" # 可替换为其他商品关键词

response = requests.get(url, headers=headers)

if response.status_code == 200:

    html_content = response.text

else:

    print(f"请求失败,状态码:{response.status_code}")

 

 

这里, requests.get() 方法发送请求, headers 参数传递构造好的请求头。如果请求成功,状态码为200,将网页内容存储在 html_content 变量中;否则,打印出错误状态码。

 

(二)解析页面提取商品信息

 

借助 BeautifulSoup 库解析HTML内容,提取商品信息:

 

from bs4 import BeautifulSoup

 

soup = BeautifulSoup(html_content, 'html.parser')

products = soup.find_all('div', class_='gl-i-wrap') # 假设商品信息所在的div类名为gl-i-wrap

data = []

for product in products:

    name = product.find('div', class_='p-name').find('em').text.strip()

    price = product.find('div', class_='p-price').find('i').text.strip()

    # 尝试获取销量信息,若无则设为None

    sales = product.find('div', class_='p-commit').find('strong')

    if sales:

        sales = sales.text.strip()

    else:

        sales = None

    data.append({

        '商品名称': name,

        '商品价格': price,

        '商品销量': sales

    })

 

 

这段代码中, BeautifulSoup(html_content, 'html.parser') 创建解析对象, find_all() 方法查找所有包含商品信息的 <div> 标签。然后,通过层层查找子标签,提取商品名称、价格和销量信息,并存储在 data 列表中。

 

(三)数据存储

 

利用 pandas 库将提取到的数据整理成表格形式,并保存为CSV文件:

 

import pandas as pd

 

df = pd.DataFrame(data)

df.to_csv('jd_products.csv', index=False, encoding='utf-8-sig')

 

 

 pd.DataFrame(data) 将列表数据转换为DataFrame表格, to_csv() 方法将表格保存为CSV文件, index=False 表示不保存行索引, encoding='utf-8-sig' 确保文件编码正确,避免中文乱码问题。

 

三、进阶与优化

 

(一)分页爬取

 

京东商品搜索结果通常有多页,要获取海量数据,就需要实现分页爬取。通过分析URL规律可以发现,页码参数一般在URL中以 page 表示。例如,第一页的URL可能是 https://search.jd.com/Search?keyword=笔记本电脑&page=1 ,第二页是 https://search.jd.com/Search?keyword=笔记本电脑&page=2 ,以此类推。

利用这个规律,通过循环改变 page 参数的值,实现多页数据的获取:

 

for page in range(1, 11): # 假设获取前10页数据

    url = f"https://search.jd.com/Search?keyword=笔记本电脑&page={page}"

    response = requests.get(url, headers=headers)

    if response.status_code == 200:

        html_content = response.text

        # 解析页面提取商品信息的代码...

    else:

        print(f"第{page}页请求失败,状态码:{response.status_code}")

    time.sleep(random.uniform(1, 3)) # 设置随机请求间隔,避免反爬

 

 

(二)应对反爬机制

 

除了设置请求头和请求间隔,还可以使用代理IP进一步绕过反爬。代理IP就像是一个中间人,爬虫通过它向京东服务器发送请求,隐藏真实IP地址,降低被封禁的风险。可以从一些免费或付费的代理IP服务提供商获取代理IP列表,然后在代码中随机选择使用:

 

proxies = [

    {"http": "http://111.111.111.111:8080"},

    {"http": "http://222.222.222.222:8080"},

    # 更多代理IP

]

 

proxy = random.choice(proxies)

response = requests.get(url, headers=headers, proxies=proxy)

 

 

(三)异常处理

 

在爬取过程中,可能会遇到各种异常情况,如网络波动导致请求超时、页面结构变化导致元素无法提取等。为了提高爬虫的稳定性和可靠性,需要添加异常处理机制:

 

try:

    response = requests.get(url, headers=headers, proxies=proxy, timeout=5)

    response.raise_for_status() # 检查请求是否成功,不成功则抛出异常

    html_content = response.text

    # 解析页面提取商品信息的代码...

except requests.exceptions.RequestException as e:

    print(f"请求发生异常:{e}")

except Exception as e:

    print(f"其他异常:{e}")

 

 

四、法律与道德考量

在进行网页爬取时,必须遵守相关法律法规和网站的使用条款。京东的 robots.txt 文件规定了哪些页面可以被爬取,哪些不可以,一定要严格遵守,避免侵权和法律风险。同时,爬取数据应仅用于合法的商业分析、学术研究等正当目的,不得用于非法竞争、数据贩卖等不当行为。

 

通过以上步骤和技巧,你已经掌握了使用Python获取京东商品信息的方法。在实际应用中,可以根据具体需求,进一步优化和扩展代码,让数据更好地为业务服务,创造更大的价值。

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

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

相关文章

聊一聊常见的超时问题:timeout

大家好&#xff0c;我是G探险者&#xff01; 在日常开发中&#xff0c;“超时&#xff08;Timeout&#xff09;”类错误是开发者们经常遇到的问题。无论是调用第三方服务、访问数据库&#xff0c;还是并发任务处理&#xff0c;都可能因超时而导致请求失败或系统异常。 本文将系…

创建型模式:工厂方法(Factory Method)模式

一、简介 工厂方法(Factory Method)模式是一种创建型设计模式,它定义了一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。在 C# 中,工厂方法模式提供了一种更灵活的对象创建方式,将对象的创建和使用分离,提高了代码的可维护性和…

外网访问内网海康威视监控视频的方案:WebRTC + Coturn 搭建

外网访问内网海康威视监控视频的方案&#xff1a;WebRTC Coturn 需求背景 在仓库中有海康威视的监控摄像头&#xff0c;内网中是可以直接访问到监控摄像的画面&#xff0c;由于项目的需求&#xff0c;需要在外网中也能看到监控画面。 实现这个功能的意义在于远程操控设备的…

Redis 8.0正式发布,再次开源为哪般?

Redis 8.0 已经于 2025 年 5 月 1 日正式发布&#xff0c;除了一些新功能和性能改进之外&#xff0c;一个非常重要的改变就是新增了开源的 AGPLv3 协议支持&#xff0c;再次回归开源社区。 为什么说再次呢&#xff1f;这个需要从 2024 年 3 月份 Redis 7.4 说起&#xff0c;因为…

382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接

之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…

大模型系列(五)--- GPT3: Language Models are Few-Shot Learners

论文链接&#xff1a; Language Models are Few-Shot Learners 点评&#xff1a; GPT3把参数规模扩大到1750亿&#xff0c;且在少样本场景下性能优异。对于所有任务&#xff0c;GPT-3均未进行任何梯度更新或微调&#xff0c;仅通过纯文本交互形式接收任务描述和少量示例。然而&…

【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解

这里写目录标题 1. wireshark1.1. 过滤包1.2. 常见分析 2. tcpdump3. iperf 1. wireshark **ip.dst eq 10.0.0.21** 是用于网络流量分析工具&#xff08;例如 Wireshark 或 tcpdump&#xff09;的过滤器表达式。 它的作用是筛选出所有目标IP地址为 10.0.0.21 的数据包 IP.add…

Django rest_framework 信号机制生成并使用token

1、在setting.py 中增加设置 DEFAULT_AUTHENTICATION_CLASSES:[rest_framework.authentication.BasicAuthentication,#基本的用户名密码验证rest_framework.authentication.SessionAuthentication,rest_framework.authentication.TokenAuthentication,# token 认证], INSTALLE…

SQL Server To Paimon Demo by Flink standalone cluster mode

需求&#xff1a;使用 Flink CDC 测试 SQL Server 连接 Paimon 操作&#xff1a;启动 Flink standalone cluster 后&#xff0c;接着启动 Flink SQL Client&#xff0c;则通过 Flink SQL Client 提交 insert & select job 到该 8081 cluster Flink SQL Client 执行案例 -…

MySQL 从入门到精通(四):备份与恢复实战——从逻辑到物理,增量备份全解析

数据是企业的核心资产&#xff0c;而数据库作为数据存储的 “心脏”&#xff0c;其备份与恢复策略直接关系到业务的连续性。本文将结合 MySQL 的日志体系与备份工具&#xff0c;深入讲解逻辑备份、物理备份、增量备份的实战操作&#xff0c;帮助你构建可靠的数据库保护方案。 目…

鸿蒙编译boost整合linux跨平台应用

openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系统 boost编译 使用deveco的写cmake集成boost boost使用1.88的最新版本&#xff0c;带cmake工具链 https://github.com/boostorg/boost.git boost的源码都在sub_module中 deveco 4.1的版本sdk最高到9&am…

机器视觉的平板电脑屏幕组件覆膜应用

在现代智能制造业中&#xff0c;平板电脑屏幕组件覆膜工序是确保产品外观和功能完整性的重要环节。随着技术的进步&#xff0c;传统的覆膜方式已经无法满足高速度、高精度的生产需求。而MasterAlign视觉系统的出现&#xff0c;将传统覆膜工艺转变为智能化、自动化的生产流程。在…

android-ndk开发(10): use of undeclared identifier ‘pthread_getname_np‘

1. 报错描述 使用 pthread 获取线程名字&#xff0c; 用到 pthread_getname_np 函数。 交叉编译到 Android NDK 时链接报错 test_pthread.cpp:19:5: error: use of undeclared identifier pthread_getname_np19 | pthread_getname_np(thread_id, thread_name, sizeof(thr…

【前端基础】6、CSS的文本属性(text相关)

目录内容 text-decoration&#xff1a;设置文本装饰线text-transform&#xff1a;文本中文字的大小写转换text-indent&#xff1a;首行缩进text-align&#xff1a;设置文本对齐方式 一、text-decoration&#xff1a;设置文本装饰线 常见值&#xff1a; None&#xff1a;没有…

【Ansible】模块详解

一、ansible概述 1.1 ansible介绍 Ansible 是一个基于 Python 开发的配置管理和应用部署工具&#xff0c;近年来在自动化管理领域表现突出。它集成了许多传统运维工具的优点&#xff0c;几乎可以实现 Pubbet 和 Saltstack 所具备的功能。 1.2 ansible能做什么 批量处理。An…

Git实战经验分享:深入掌握git commit --amend的进阶技巧

一、工具简介 git commit --amend是Git版本控制系统的核心补救命令&#xff0c;主要用于修正最近一次提交的元数据。该命令不会产生新的提交记录&#xff0c;而是通过覆盖原提交实现版本历史的整洁性&#xff0c;特别适合在本地仓库进行提交优化。 二、核心应用场景 提交信息…

软考 系统架构设计师系列知识点之杂项集萃(56)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;55&#xff09; 第91题 商业智能关注如何从业务数据中提取有用的信息&#xff0c;然后采用这些信息指导企业的业务开展。商业智能系统主要包括数据预处理、建立&#xff08;&#xff09;、数据分…

Spark任务调度流程详解

1. 核心调度组件 DAGScheduler&#xff1a;负责将Job拆分为Stage&#xff0c;处理Stage间的依赖关系。 TaskScheduler&#xff1a;将Task分配到Executor&#xff0c;监控任务执行。 SchedulerBackend&#xff1a;与集群管理器&#xff08;如YARN、K8s&#xff09;通信&#x…

第04章—技术突击篇:如何根据求职意向进行快速提升与复盘

经过上一讲的内容阐述后&#xff0c;咱们定好了一个与自身最匹配的期望薪资&#xff0c;接着又该如何准备呢&#xff1f; 很多人在准备时&#xff0c;通常会选择背面试八股文&#xff0c;这种做法效率的确很高&#xff0c;毕竟能在“八股文”上出现的题&#xff0c;也绝对是面…

Go语言的逃逸分析是怎么进行的

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…