You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moglix网站商品URL爬取:HREF标签Class动态变化问题求助

解决Moglix商品URL爬取中动态Class的问题

方案1:通过URL模式筛选a标签

动态生成的class不可靠,但商品URL通常有固定格式(比如包含/product/),直接筛选符合特征的a标签即可:

import requests
import re
from bs4 import BeautifulSoup

prod_url = []
# 匹配商品URL的特征正则
url_pattern = re.compile(r'/product/')

for i in range(1, 400):
    r = requests.get(f'https://www.moglix.com/automotive/car-accessories/216110000?page={i}')
    soup = BeautifulSoup(r.content, 'lxml')
    # 遍历所有带href的a标签,筛选符合URL模式的
    for link in soup.find_all('a', href=True):
        if url_pattern.search(link['href']):
            prod_url.append(link['href'])

print(f"共获取到{len(prod_url)}条商品URL")

方案2:通过稳定的父容器定位

商品卡片的外层容器一般有固定class(不会随页面动态变化),先定位容器再提取内部的a标签:

import requests
from bs4 import BeautifulSoup

prod_url = []

for i in range(1, 400):
    r = requests.get(f'https://www.moglix.com/automotive/car-accessories/216110000?page={i}')
    soup = BeautifulSoup(r.content, 'lxml')
    # 替换成实际页面中商品卡片的固定class(比如'product-tile',需自行查看页面确认)
    product_cards = soup.find_all('div', class_='product-tile')
    for card in product_cards:
        link = card.find('a', href=True)
        if link:
            prod_url.append(link['href'])

print(f"共获取到{len(prod_url)}条商品URL")

提示:打开浏览器开发者工具,查看商品卡片的外层div,找到不会动态变化的class名称替换代码中的product-tile。

方案3:直接解析页面内嵌的JSON数据(最可靠)

很多电商网站会把商品列表以JSON形式嵌入页面的script标签中,这种方式无需处理HTML结构,效率更高:

import requests
import json
import re

prod_url = []
# 匹配页面中存储商品数据的script标签内容
data_pattern = re.compile(r'window\.__INITIAL_STATE__\s*=\s*(.*?);')

for i in range(1, 400):
    r = requests.get(f'https://www.moglix.com/automotive/car-accessories/216110000?page={i}')
    match = data_pattern.search(r.text)
    if match:
        try:
            # 解析JSON数据
            raw_data = json.loads(match.group(1))
            # 根据实际JSON层级提取商品URL(需自行查看数据结构调整路径)
            for product in raw_data.get('products', {}).get('list', []):
                prod_url.append(product.get('url'))
        except json.JSONDecodeError:
            print(f"第{i}页JSON解析失败")

print(f"共获取到{len(prod_url)}条商品URL")

提示:打开页面源代码(Ctrl+U),搜索window.__INITIAL_STATE__或类似关键词,找到商品数据的具体层级,调整代码中的取值路径。


内容的提问来源于stack exchange,提问作者Lalit Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:55:26