Python 抓取京东商城手机商品列表 URL 示例
介绍如何利用 Python 结合 requests 与 BeautifulSoup 模块,快速提取京东商城手机商品分类下的详情页链接。涵盖环境配置、分页遍历逻辑、链接清洗与文件落盘,附带针对目标站点的反爬应对策略。
抓取目标与前置准备
本示例以京东商城手机频道列表页为例,通过访问分页地址、定位商品容器节点,逐页提取每个商品的跳转链接。原始教学多基于已停更的 Python 2 与 urllib2,现代项目中应统一迁移至 Python 3 并使用 requests 处理网络请求。
在运行前,请确保系统已安装 Python 3.6+,并通过终端执行以下命令安装核心依赖:pip install requests beautifulsoup4
第1步:构建请求头与容错获取函数
目标站点对频繁访问有基础防护,需在请求时携带标准的 User-Agent。同时封装带超时与编码处理的读取方法,避免因网络波动导致程序中断。
import requests
from bs4 import BeautifulSoup
import time
def get_page_content(url_str, headers):
"""安全获取页面源码,自动处理中文编码"""
try:
resp = requests.get(url_str, headers=headers, timeout=10)
resp.encoding = resp.apparent_encoding
return resp.text
except requests.RequestException as e:
print(f"[请求失败] {e}")
return None
第2步:实现分页判断与列表解析逻辑
京东列表页的分页状态通常由带有特定类名的 DOM 元素控制。代码首先检测下一页是否存在,若存在则进入解析循环,利用 find_all 定位商品标题外层容器,进而提取内部 <a> 标签的 href 属性。提取后需对相对路径进行补全,保证链接可直接访问。
def crawl_mobile_links(start_page=1, headers=None):
if headers is None:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/114.0.0.0 Safari/537.36"
}
current_page = start_page
extracted_urls = []
base_pattern = "http://list.jd.com/9987-653-655-0-0-0-0-0-0-0-1-1-{}-1-1-72-4137-33.html"
while True:
target_url = base_pattern.format(current_page)
html = get_page_content(target_url, headers)
if not html:
break
soup = BeautifulSoup(html, "html.parser")
# 检测是否到达最后一页
next_disabled = soup.find_all("span", {"class": "next-disabled"})
if len(next_disabled) > 0:
break
# 解析商品链接
product_blocks = soup.find_all("div", {"class": "p-name"})
for block in product_blocks:
link_tag = block.find("a")
if link_tag and link_tag.get("href"):
raw_href = link_tag["href"]
# 兼容部分协议无关或根路径开头的链接
if raw_href.startswith("//"):
clean_href = "https:" + raw_href
elif raw_href.startswith("/"):
clean_href = "https:" + raw_href
else:
clean_href = raw_href
extracted_urls.append(clean_href)
current_page += 1
print(f"[进度] 已完成第 {current_page-1} 页,累计提取 {len(extracted_urls)} 条")
# 保持合理请求间隔
time.sleep(1.5)
return extracted_urls
第3步:执行抓取与结果持久化
调用上述逻辑获取结果集后,直接使用文件写入模式保存为文本格式。生产环境中可替换为数据库插入或 CSV 导出。
if __name__ == "__main__":
print("开始抓取京东手机商品列表...")
url_list = crawl_mobile_links()
print(f"\n抓取完成,共获得 {len(url_list)} 条商品链接")
save_path = "jd_phone_urls_output.txt"
# 先清空或创建新文件写入
with open(save_path, "w", encoding="utf-8") as f:
for u in url_list:
f.write(u + "\n")
print(f"结果已写入 {save_path}")
注意事项与常见问题排查
- 选择器失效:电商网站前端结构更新频繁,若
p-name或next-disabled查不到数据,请按 F12 打开浏览器开发者工具,重新核对当前页面的 Class 名称或改用 ID、属性匹配。 - 风控拦截:连续无间隔请求会触发验证码或 IP 临时封禁。务必保留
time.sleep间隔,若需大规模采集,建议接入高质量代理池或使用异步并发方案。 - 链接有效性:部分跳转链接含重定向参数或短链,落地后可能需要二次请求才能直达商品主图/详情区,可根据实际需求追加去重或清洗逻辑。
以上就是 Python 抓取京东商城手机商品列表 URL 方法的详细内容,更多关于 Python 网络爬虫与数据提取的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









