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

Python BeautifulSoup爬取遍历URL列表始终返回首个页面内容排查

问题原因

你传入的所有URL仅末尾#后的哈希锚点不同,HTTP请求不会将锚点部分发送至服务端,因此你每一轮循环发出的请求实际访问的都是同一个地址https://www.stoneagetools.com/waterblast-tools-automated-equipment,服务端返回的HTML内容完全一致。
你看到print(url)能输出正确地址,是因为打印的是你本地存储的完整字符串,和requests实际发出的请求内容无关,所以才会出现不管循环到哪一轮,解析出的标签内容都和第一次完全相同的情况。

修复方法

这个站点的分类切换是前端通过锚点控制内容显隐实现的,所有分类的内容在第一次请求页面时就已经全部加载到HTML中,不需要重复发起多次请求。你只需要请求一次基础页面,再根据每个锚点对应的DOM区块,单独提取区块内的h3标签即可,不需要全局查找所有h3。
修正后的可运行代码如下:

import requests
import bs4

urllist = [
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#exchanger',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#pipe',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#surface',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#tank',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#boiler',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#tools',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#swivels',
    'https://www.stoneagetools.com/waterblast-tools-automated-equipment#accessories'
]

def Get_Names(urllist):
    endlist = []
    # 所有URL实际对应同一个页面,仅需请求一次
    base_url = 'https://www.stoneagetools.com/waterblast-tools-automated-equipment'
    response = requests.get(base_url)
    response.encoding = response.apparent_encoding
    soup = bs4.BeautifulSoup(response.text, 'lxml')

    for url in urllist:
        templist = []
        print(url)
        # 提取当前URL对应的锚点ID
        anchor_id = url.split('#')[-1]
        # 定位到锚点对应的内容区块
        current_section = soup.find(id=anchor_id)
        # 仅在当前区块内查找h3标签,跳过第一个分类标题
        taglist = current_section.find_all('h3')
        if len(taglist) > 0:
            del taglist[0]
        for tag in taglist:
            # 直接提取标签文本,无需手动替换标签字符串
            templist.append(tag.text.strip())
        endlist.append(templist)
    
    return endlist

补充说明:如果你后续遇到锚点对应内容是异步接口加载的站点,需要打开浏览器开发者工具抓对应的XHR接口请求,直接请求接口拿数据即可,不需要请求带锚点的页面地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:12:45