Python3+代理爬取Supreme时出现'NoneType'无'text'属性错误求助
解决Supreme UK爬取的两个核心问题:AttributeError与代理配置
一、先搞定AttributeError: 'NoneType' object has no attribute 'text'
这个错误本质是你用BeautifulSoup定位的元素根本不存在,返回了None,然后强行调用.text就触发了报错。大概率是这两个原因:
- 你用的选择器(比如
find/find_all的参数)不对,和Supreme UK页面的实际HTML结构不匹配 - Supreme的反爬机制把你的请求识别成机器人了,返回的是空白页面或反爬验证页面,自然找不到目标元素
修复步骤:
先确认请求返回的页面内容是否正常
在解析之前,先把响应内容打印出来排查:import requests from bs4 import BeautifulSoup url = "https://www.supremenewyork.co.uk/shop/all/accessories" # 先不带代理测试,看看基础请求是否能拿到正常页面 response = requests.get(url) print(response.status_code) print(response.text[:1000]) # 打印前1000个字符快速判断如果返回403、503状态码,或者内容里有验证码/Cloudflare验证提示,那先解决反爬和代理问题;如果返回正常页面,再检查你的元素选择器。
修正元素选择器+添加非空判断
Supreme UK的商品名称通常在<div class="name">标签里,你可以用这个选择器试试,关键是每次调用find后都做非空判断,避免None调用.text:soup = BeautifulSoup(response.text, "html.parser") items = soup.find_all("div", class_="inner-article") for item in items: name_tag = item.find("div", class_="name") if name_tag: print(name_tag.text.strip()) else: print("当前商品未找到名称标签")
二、代理配置问题(Supreme反爬的核心难点)
Supreme的反爬非常严格,普通代理根本过不了,尤其是Cloudflare的验证。这里给你几个实用建议:
- 用带会话保持的高匿代理:普通透明代理会被直接识别,必须用高匿代理,且用
requests.Session()管理会话,保持请求一致性 - 添加完整的模拟浏览器请求头:至少要包含
User-Agent、Accept-Language、Referer这些,模拟真实用户行为:session = requests.Session() 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", "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8", "Referer": "https://www.supremenewyork.co.uk/" } session.headers.update(headers) # 配置代理,若有认证格式为http://user:pass@ip:port proxies = { "http": "http://your-proxy-ip:port", "https": "http://your-proxy-ip:port" } # 用session发送请求 response = session.get(url, proxies=proxies) - 考虑用无头浏览器绕过验证:如果代理还是搞不定Cloudflare,可以用Playwright或Selenium,它们能模拟真实浏览器交互,更容易绕过验证。比如Playwright的示例:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://www.supremenewyork.co.uk/shop/all/accessories") # 等待商品元素加载完成 page.wait_for_selector(".inner-article") items = page.query_selector_all(".inner-article .name") for item in items: print(item.text_content()) browser.close()
额外提醒
Supreme的网站结构经常变动,你要定期检查页面HTML结构,更新选择器。另外,频繁爬取可能导致IP被永久封禁,建议控制请求频率,添加随机延迟。
内容的提问来源于stack exchange,提问作者user9510595
相关产品推荐
相关产品推荐

