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
相关产品推荐
相关产品推荐

