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

使用Julia的try-catch处理爬虫不可用URL时出现0x0 DataFrame的求助

Julia爬虫try-catch导致空DataFrame的修复方案

问题根源

你的代码出现空DataFrame有三个核心问题:

  • HTTP.get(url)放在try块外,请求失败(如404、网络错误)会直接抛出异常中断循环,无法进入catch分支
  • try块内错误地向未初始化的df对象push数据,而非预先定义的information数组
  • try块覆盖范围太小,仅包含数据提取环节,未覆盖请求和HTML解析步骤,无法处理这些环节的异常

修正后的代码

下面是能正确忽略不可用URL的完整代码:

using HTTP
using Gumbo
using Cascadia
using DataFrames
using CSV

links = ["0100111338", "0100105077", "0100110528", "0107464283", "0105342089"]
base_url = "https://infodoanhnghiep.com/tim-kiem/ma-so-thue/"

urls = [base_url * link * "/" for link in links]

information = []

for url in urls
    try
        # 将请求、解析、提取全放入try块
        r = HTTP.get(url)
        h = parsehtml(String(r.body))
        
        companies = eachmatch(sel".company-item", h.root)
        name = string(companies[1][2][1][1])
        tax = string(companies[1][4][1])
        address = string(companies[1][5][1])
        
        push!(information, (name = name, tax = tax, address = address))
    catch e
        # 打印异常信息方便调试(可选)
        println("处理URL失败: $url,错误信息: $e")
        # 直接跳过无效URL,不添加空行
        continue
    end
end

df = DataFrame(information)
CSV.write("information.csv", df, writeheader=true, utf8=true)

关键修改说明

  • 扩大try块范围:把HTTP.get、HTML解析、数据提取全部放入try块,确保任何环节出错都能被捕获
  • 修正push目标:将数据push到information数组,而非未定义的df
  • 异常处理逻辑:捕获异常后打印错误信息(可选),然后用continue跳过当前无效URL,不向数组添加空记录
  • 简化URL生成:用列表推导式替代循环push,更符合Julia风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:07:28