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

使用bs4网页爬取时如何解决返回‘None’结果的问题

问题排查与解决方法

核心原因:反爬机制拦截

MarketWatch会检测请求的用户代理(User-Agent),默认requests.get()的请求头会被识别为非浏览器请求,返回的页面内容不包含目标的bq-quote标签,导致你找不到元素。

修复步骤

  1. 添加模拟浏览器的请求头
    修改requests.get()部分,带上标准的浏览器User-Agent,让服务器返回正常页面内容:
    import requests
    from bs4 import BeautifulSoup
    
    ticker = input("What stock would you like to track?: (enter the ticker) ")
    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'
    }
    url = f"https://www.marketwatch.com/investing/stock/{ticker}?mod=search_symbol"
    r = requests.get(url, headers=headers)
    webpage = BeautifulSoup(r.text, 'html.parser')
    locate = webpage.find('bq-quote', {'class': 'value'})
    # 提取文本内容而不是打印标签对象
    print(locate.text if locate else "未找到对应股价信息")
    
  2. 验证页面内容
    可以先打印r.text的前几百字符,确认返回的是正常的页面源码,而不是反爬提示页面。如果还是不行,可能需要检查是否有JS动态渲染的情况,但添加UA是最常见的解决方式。

额外注意事项

  • 不要频繁发送请求,避免被网站封禁IP
  • 如果后续页面结构变更,需要重新检查标签选择器是否正确

内容的提问来源于stack exchange,提问作者Alex is funny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:24:55