Python新手如何爬取wiggle.co.uk山地自行车产品名称与价格
解决方案
现有代码的错误点
- 语法大小写错误:Python关键字
import/from/for/print必须全小写,同时变量名大小写敏感,你定义的Page/Soup后续用小写page/soup调用会触发报错 - 字符串未加引号:
requests.get()的URL参数是字符串类型,必须用英文半角引号包裹 - 引号格式错误:代码内所有引号必须使用英文半角格式,中文引号会直接触发语法错误
- CSS选择器规则错误:
select()方法使用类选择器时,类名前必须加.前缀,你原代码不仅没有加前缀,类名里的短横线还误用了全角字符
正确的元素审查与提取方法
- 按F12打开浏览器开发者工具,点击左上角元素选择按钮,再点击页面上你要提取的产品名/价格,元素面板会自动定位到对应DOM节点
- 右键定位到的DOM节点,选择「复制」-「复制选择器」,可直接得到规范的CSS选择器
- 可在开发者工具控制台输入
document.querySelectorAll("你复制的选择器"),验证返回的节点是否和你要提取的内容匹配
修正后可运行代码
import requests from bs4 import BeautifulSoup # 加请求头模拟浏览器访问,避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } url = "https://www.wiggle.co.uk/cycle/mountain-bikes" page = requests.get(url, headers=headers) # 先验证请求是否成功,200代表正常返回 print("请求状态码:", page.status_code) soup = BeautifulSoup(page.content, "html.parser") # 提取产品名称 product_names = soup.select(".bem-product-thumb__name--grid") # 提取产品价格 product_prices = soup.select(".bem-product-price__unit--grid") # 成对输出前48个产品的名称和价格 for name, price in zip(product_names[:48], product_prices[:48]): # 去掉英镑符号,只保留数字格式的价格 clean_price = price.text.strip().replace("£", "") print(f"产品名:{name.text.strip()},价格:{clean_price}")
如果运行后请求状态码不是200,说明请求被网站反爬策略拦截,可以尝试更换UA头或者增加访问延迟。
内容的提问来源于stack exchange,提问作者Archnem
相关产品推荐
相关产品推荐

