Web scraping 使用Julia从大量URL中删除字符串

Web scraping 使用Julia从大量URL中删除字符串,web-scraping,julia,Web Scraping,Julia,新年快乐 我刚刚开始学习Julia,我给自己设置的第一个小挑战是从大量URL列表中获取数据 我有一个CSV文件中的CA50KURL(我使用正则表达式成功地从JSON解析了它)。我想刮取每个字符串并返回一个匹配的字符串(“/page/12345/view”-其中12345是任意整数) 我使用HTTP和Queryverse成功地做到了这一点(虽然从CSV和CSVFiles开始,但为了学习而查看包),但脚本似乎在不到2k时停止了。我看不到超时之类的错误 请问是否有人能告诉我我做错了什么,或者我如何以不

新年快乐

我刚刚开始学习Julia,我给自己设置的第一个小挑战是从大量URL列表中获取数据

我有一个CSV文件中的CA50KURL(我使用正则表达式成功地从JSON解析了它)。我想刮取每个字符串并返回一个匹配的字符串(“/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密集型操作,您应该使用大量异步任务来完成它。此外,这应该与
get
函数的
readtimeout
参数结合使用。因此,您的代码大致如下所示:

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

即使有一台服务器延迟了传输,仍然会有许多连接工作。

谢谢!非常有用。这对我来说是一个新函数,所以有点困难,但我会继续阅读来解决它!非常感谢。