Python 抓取京东商城手机商品列表 URL 示例

阿澈
阿澈
发布时间:2026-10-12| 3人浏览过
原创

介绍如何利用 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 网络爬虫与数据提取的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。