Ruby - WebCrawler如何访问找到的链接?
Ruby - WebCrawler how to visit the links of the found links?
我尝试制作一个 WebCrawler,它可以从主页找到链接并一次又一次地访问找到的链接..
现在我已经用解析器编写了一个代码,它向我显示找到的链接并在那里打印该主页某些标签的统计信息,但我不知道如何循环访问新链接并在那里打印统计信息。
*
@visit = {}
@src = Net::HTTP.start(@url.host, @url.port) do |http|
http.get(@url.path)
@content = @src.body
*
def govisit
if @content =~ @commentTag
end
cnt = @content.scan(@aTag)
cnt.each do |link|
@visit[link] = []
end
puts "Links on this site: "
@visit.each do |links|
puts links
end
if @visit.size >= 500
exit 0
end
printStatistics
end
首先,您需要一个接受 link 和 returns 正文输出的函数。然后将所有 link 解析出正文并保留 link 的列表。如果您还没有访问 link,请检查该列表。从新的 links 列表中删除访问过的 links 并再次调用相同的函数并重新执行。
要在某个点停止抓取工具,您需要在条件中构建 while 循环。
根据您的代码:
@visited_links = []
@new_links = []
def get_body(link)
@visited_links << link
@src = Net::HTTP.start(@url.host, @url.port) { |http| http.get(@url.path) }
@src.body
end
def get_links(body)
# parse the links from your body
# check if the content does not have the same link
end
start_link_body = get_body("http://www.test.com")
get_links(start_link_body)
while @visited_links < 500 do
body = get_body(@new_links.shift)
get_links(body)
end
我尝试制作一个 WebCrawler,它可以从主页找到链接并一次又一次地访问找到的链接.. 现在我已经用解析器编写了一个代码,它向我显示找到的链接并在那里打印该主页某些标签的统计信息,但我不知道如何循环访问新链接并在那里打印统计信息。
*
@visit = {}
@src = Net::HTTP.start(@url.host, @url.port) do |http|
http.get(@url.path)
@content = @src.body
*
def govisit
if @content =~ @commentTag
end
cnt = @content.scan(@aTag)
cnt.each do |link|
@visit[link] = []
end
puts "Links on this site: "
@visit.each do |links|
puts links
end
if @visit.size >= 500
exit 0
end
printStatistics
end
首先,您需要一个接受 link 和 returns 正文输出的函数。然后将所有 link 解析出正文并保留 link 的列表。如果您还没有访问 link,请检查该列表。从新的 links 列表中删除访问过的 links 并再次调用相同的函数并重新执行。
要在某个点停止抓取工具,您需要在条件中构建 while 循环。
根据您的代码:
@visited_links = []
@new_links = []
def get_body(link)
@visited_links << link
@src = Net::HTTP.start(@url.host, @url.port) { |http| http.get(@url.path) }
@src.body
end
def get_links(body)
# parse the links from your body
# check if the content does not have the same link
end
start_link_body = get_body("http://www.test.com")
get_links(start_link_body)
while @visited_links < 500 do
body = get_body(@new_links.shift)
get_links(body)
end