我正在尝试使用位于同一域的Nokogiri抓取多个网址。例如cltampa.com/potlikker和cltampa.com/artbreaker。对于这两个网址,我正在寻找相同的两个元素,每个博客帖子的主标题图像和标题的网址。我有用于抓取图像的代码,但它效率很低,绝对不是DRY。我也需要抓住相关的标题href,所以我可以在我的视图中用它们包装图像。
我的控制器目前看起来像这样
def index
doc = Nokogiri::HTML(open('http://cltampa.com/blogs/potlikker'))
potlikker = doc.xpath('//*[@class="contentImageCenter"]/img/@src')
doc = Nokogiri::HTML(open('http://cltampa.com/blogs/artbreaker'))
artbreaker = doc.xpath('//*[@class="contentImageCenter"]/img/@src')
@images = potlikker + artbreaker
end
我的观点看起来像这样
<div id="container" class="container">
<% @images.each do |img|%>
<div class="item">
<a href="<@url_should_go_here" target="_blank"><img src="http://www.cltampa.com<%= img %>"></a>
</div>
<% end %>
</div>
我的第一个问题是什么是解析多个网址的最有效方法,因为我现在拥有的不是它。我会为此创建一个单独的方法,对此的任何帮助都会很棒。
我的下一个问题是如何在抓取图片网址的同时获取标题href。我有xpath分别抓住它们,但把它们放在一起然后在我的视图中渲染它让我感到困惑。
我一直在引用这个答案Iterating through multiple URLs to parse HTML with Nokogori,但还没有运气。
提前致谢。
进展更新
def index
urls = %w[http://cltampa.com/blogs/potlikker http://cltampa.com/blogs/artbreaker http://cltampa.com/blogs/politicalanimals http://cltampa.com/blogs/earbuds http://cltampa.com/blogs/bedpost http://cltampa.com/blogs/dailyloaf]
@final_images = []
@final_urls = []
urls.each do |url|
blog = Nokogiri::HTML(open(url))
images = blog.xpath('//*[@class="contentImageCenter"]/img/@src')
images.each do |image|
@final_images << image
end
end
urls.each do |url|
blog = Nokogiri::HTML(open(url))
story_path = blog.xpath('//*[@class="postTitle"]/a/@href')
story_path.each do |path|
@final_urls << path
end
end
end
上面的代码在技术上给了我我需要的东西,只是不确定如何在视图中将它们绑在一起。我需要在final_images周围包装final_urls。我相信有更好的方法可以做到这一点,再次感谢任何信息。
我还应该补充一点,我在Heroku上遇到了超时问题,因此任何关于加快速度,转移到后台任务等方面的建议都会非常感激。我现在正在调查,但不确定最佳路线。