Web scraping 使用Julia从大量URL中删除字符串
新年快乐 我刚刚开始学习Julia,我给自己设置的第一个小挑战是从大量URL列表中获取数据 我有一个CSV文件中的CA50KURL(我使用正则表达式成功地从JSON解析了它)。我想刮取每个字符串并返回一个匹配的字符串(“/page/12345/view”-其中12345是任意整数) 我使用HTTP和Queryverse成功地做到了这一点(虽然从CSV和CSVFiles开始,但为了学习而查看包),但脚本似乎在不到2k时停止了。我看不到超时之类的错误 请问是否有人能告诉我我做错了什么,或者我如何以不同的方式处理?学习资源的解释/链接也会很棒Web scraping 使用Julia从大量URL中删除字符串,web-scraping,julia,Web Scraping,Julia,新年快乐 我刚刚开始学习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
即使有一台服务器延迟了传输,仍然会有许多连接工作。谢谢!非常有用。这对我来说是一个新函数,所以有点困难,但我会继续阅读来解决它!非常感谢。