web-scraping - 使用 Julia 从大量 URL 中抓取字符串

标签 web-scraping julia

新年快乐!
刚开始学习 Julia 我为自己设定的第一个小挑战是从大量 URL 列表中抓取数据。
我在 CSV 文件中有大约 50k 个 URL(我使用 Julia 成功地从 JSON 中使用 Regex 解析了这些 URL)。我想抓取每个并返回一个匹配的字符串(“/page/12345/view” - 其中 12345 是任何整数)。
我设法使用 HTTP 和 Queryverse 做到了这一点(虽然是从 CSV 和 CSVFiles 开始的,但为了学习目的而查看包),但脚本似乎在不到 2k 后就停止了。我看不到诸如超时之类的错误。
我可以问是否有人可以建议我做错了什么或我如何以不同的方式处理它?学习资源的解释/链接也很棒!

using HTTP, Queryverse


URLs = load("urls.csv") |> DataFrame

patternid = r"\/page\/[0-9]+\/view"

touch("ids.txt")
f = open("ids.txt", "a")

for row in eachrow(URLs)

    urlResponse = HTTP.get(row[:url])
    if Int(urlResponse.status) == 404
        continue
    end

    urlHTML = String(urlResponse.body)

    urlIDmatch = match(patternid, urlHTML)

    write(f, urlIDmatch.match, "\n")

end

close(f)

最佳答案

总有一个服务器可以检测到您的爬虫并故意花费很长时间来响应。
基本上,由于抓取是 IO 密集型操作,因此您应该使用大量异步任务来完成。此外,这应该与 readtimeout 结合使用get 的参数功能。因此,您的代码或多或少会像这样:

asyncmap(1:nrow(URLs);ntasks=50) do n
    row = URLs[n, :]
    urlResponse = HTTP.get(row[:url], readtimeout=10)
    # the rest of your code comes here
end
即使某些服务器延迟传输,总是有许多连接在工作。

关于web-scraping - 使用 Julia 从大量 URL 中抓取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65530350/

相关文章:

julia - 用来计算组合(n选择k)的Julia函数是什么?

julia - 如何在 Julia 中创建矩阵的矩阵(或 Array{Float64,2} 的 Array{Float64,2})?

julia - 有效地 reshape 数组 2D -> 3D

matlab - webread给出的结果与网页的 'View Page Source'不同

python 请求后查询失败 :cookies?

python - 构建WebScraper时出错: TypeError: 'NoneType' object has no attribute '__getitem__'

parallel-processing - 将矩阵的每一行乘以随机数的最佳方法

python - 使用Python编辑列表中的时间戳?使用函数将 POSIX 转换为可读格式

python - 如何在python 3中获取该站点中的json数据?

networking - Julia - 无法在 Wireshark 中捕获环回 UDP 数据包