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

Python爬取Adidas鞋款链接失败求助:无法获取目标URL

解决爬取TennisExpress产品链接失败的问题

我来帮你搞定这个爬取问题~你遇到的情况大概率是因为网站反爬机制拦截了默认的requests请求,导致返回的页面里根本没有你要找的产品列表内容,所以你的BeautifulSoup代码自然找不到对应的标签。

问题分析

当你直接用requests.get(url)发送请求时,请求头里的User-Agent是Python默认的标识(比如python-requests/2.31.0),很容易被网站识别为爬虫,返回的页面可能是空白或者不包含产品数据的版本。这时候你打印soup.find("section", {"class": "productList"})会得到None,自然找不到后续的a标签。

另外,目标链接是相对路径(//xxx),即使拿到href也需要转换成完整的HTTPS链接才能使用。

修正后的代码

下面是调整后的完整代码,解决了请求拦截和链接处理的问题:

from bs4 import BeautifulSoup
import requests

url = "https://www.tennisexpress.com/search.cfm?searchKeyword=BB6892"
# 模拟浏览器的请求头,避免被反爬拦截
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'
}

# 发送带请求头的请求,并检查请求是否成功
response = requests.get(url, headers=headers)
response.raise_for_status()  # 如果请求失败会抛出异常

data = response.text
soup = BeautifulSoup(data, 'lxml')

# 先定位产品列表区域,再精确获取带product类的a标签
product_list_section = soup.find("section", class_="productList")
if product_list_section:
    # 只抓取产品对应的a标签(避免无关的链接)
    product_links = product_list_section.find_all("a", class_="product")
    for link in product_links:
        raw_href = link.get('href')
        # 把相对链接转换成完整的HTTPS链接
        full_link = f"https:{raw_href}" if raw_href.startswith('//') else raw_href
        print(full_link)
else:
    print("未找到产品列表区域,请检查请求是否成功或页面结构是否变化")

关键调整点

  • 添加请求头:用User-Agent模拟真实浏览器访问,绕过基础反爬机制
  • 精确标签定位:通过class_="product"筛选出产品对应的a标签,避免抓取无关链接
  • 处理相对链接:将//开头的相对路径补全为完整的HTTPS链接

运行这段代码后,你应该就能得到期望的链接:
https://www.tennisexpress.com/adidas-mens-adizero-ubersonic-50-yrs-ltd-tennis-shoes-off-white-and-signal-blue-62138

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:49