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

Python爬虫调用find()方法无法定位Google Finance页面元素如何解决

问题排查与解决方案

核心问题1:查找字符串使用了HTML转义实体

你代码中extract函数的查找参数写的是'&lt;div class=&quot;YMLKec fxKbKc&quot;&gt;',这里的&lt;、&quot;是HTML转义编码,对应的实际字符是<和"。只有当页面源码里本身存储的是转义后的实体字符才会匹配成功,但正常页面源码里的标签都是用<、"直接书写的,你用转义后的字符串去匹配原生页面源码,当然找不到对应标签。
如果你确认dryscrape返回的源码写入文件后确实存在目标元素,改完这个问题就能正常匹配:

def extract(data):
    # 替换为原生的未转义标签内容
    return data.find('<div class="YMLKec fxKbKc">')

核心问题2:页面渲染/反爬导致dryscrape拿到的源码和浏览器看到的不一致

浏览器审查元素看到的内容,是浏览器加载完所有JS、执行完动态渲染后的最终DOM,dryscrape作为无头渲染工具可能存在两个问题:

  • 没有等待页面动态渲染完成就拿取body:Google Finance的价格数据是JS异步加载的,你调用session.visit(url)后直接拿session.body(),可能异步请求还没返回,元素还没渲染到页面里,可添加等待指定元素出现的逻辑后再拿取源码。
  • 被Google反爬策略识别:dryscrape的UA、指纹特征很容易被识别为爬虫,Google可能会返回验证页面、简化版页面,根本不会返回带YMLKec fxKbKc类的内容。你可以把dryscrape返回的data直接写入HTML文件打开核验,确认和手动访问的页面是否一致。

核心问题3:代码存在语法错误无法正常执行

你定义的following类的__init__方法没有加self参数,Python的实例方法第一个参数必须传入实例本身,你直接写def __init__():的话,只要实例化这个类就会直接报参数数量错误,根本跑不通后续的抓取逻辑。另外你代码里也没有主动实例化following类的逻辑,所有抓取逻辑默认不会执行。

优化建议

直接用find匹配完整标签字符串容错率极低,只要类名顺序变化、多了其他属性、空格数量变化都会匹配失败,建议改用BeautifulSoup这类HTML解析库定位元素:

from bs4 import BeautifulSoup
def extract(data):
    soup = BeautifulSoup(data, 'lxml')
    target = soup.find('div', class_='YMLKec fxKbKc')
    return target.text if target else -1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:54:02