You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Julia+Gumbo网页抓取时遇类型转换错误:HTMLText无法转Int64

解决Gumbo网页抓取后存入Int64数组的MethodError问题

嘿,这个问题我太熟了!你碰到的LoadError: MethodError: Cannot convert an object of type HTMLText to an object of type Int64,本质就是类型不匹配——Julia是强类型语言,你试图把Gumbo解析返回的HTMLText节点对象直接塞进Int64类型的数组里,这俩完全不是一个“频道”的,肯定会报错。

为什么会这样?

当你用Gumbo爬取网页时,页面里的文本内容并不是直接以字符串/数字形式返回的,而是被包装在HTMLText这个结构体里(它是Gumbo用来表示HTML文本节点的类型)。你得先把这个结构体里的纯文本内容提取出来,再转换成Int64类型,才能存入对应的数组。

具体解决方案

给你一套完整的操作步骤,附代码示例:

  1. 提取HTMLText中的纯字符串:使用Gumbo提供的nodeText()函数(或者直接访问节点的.text字段),把HTMLText对象转换成普通字符串。
  2. 字符串转Int64:用parse(Int64, 字符串)完成类型转换,如果担心文本里有非数字内容(比如空格、符号),可以用tryparse来避免崩溃。
  3. 存入数组:把转换后的数字push到你的Int64数组里。

示例代码

using Gumbo, Cascadia

# 先模拟解析一个包含数字的网页(替换成你实际爬取的页面)
html_content = """
<div class="numbers">
    <span>100</span>
    <span>200</span>
    <span>300</span>
</div>
"""
doc = parsehtml(html_content)

# 初始化Int64类型的空数组
int_array = Int64[]

# 遍历页面中所有目标节点(替换成你实际需要抓取的节点选择器)
for target_node in eachmatch(Selector(".numbers span"), doc.root)
    # 第一步:提取HTMLText里的纯文本
    raw_text = nodeText(target_node)
    # 第二步:转成Int64,用tryparse处理可能的非数字情况
    parsed_num = tryparse(Int64, strip(raw_text))
    # 如果转换成功,再加入数组
    if parsed_num !== nothing
        push!(int_array, parsed_num)
    end
end

# 输出结果:[100, 200, 300]
println(int_array)

额外提醒

  • 如果你确定所有文本都是合法数字,直接用parse(Int64, raw_text)就行,不需要tryparse
  • 要是文本里有多余的空格(比如" 123 "),可以先用strip(raw_text)去掉前后空白再转换;
  • 注意导入Cascadia模块,因为Gumbo的节点选择器功能依赖它实现。

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

火山引擎 最新活动