确定,
我正在编写无处不在的爬虫,并遇到了一些问题。 〜在Ruby上作为一个完全的菜鸟并不奇怪。
我使用Nokogiri获取页面的html - 找到我感兴趣的所有链接,然后下载与这些链接相关的文件。一切都很好。
但是,我似乎无法通过单一方法获取所需信息。
如果我使用file = open(Src).read
,则文件包含文件的内容 - 这对于保存到数据库和散列目的非常有用。但它并没有让我轻松访问(据我所知)文件名,大小,文件类型等属性。
要获取该信息,我正在使用Mechanize:
agent = Mechanize.new
fop = agent.get(Src)
使用head agent.head方法我可以获得内容类型,上次修改日期和内容长度。 fop.filename
当然给了我文件名。现在使用agent.head(Src)["content-type"]
方法,我认为为内容类型,最后修改和内容长度调用重新下载信息 - 它正在下载头3次。总的浪费我说文件已经包含了完整的文件,fop应该提供我需要的所有其他信息,而不需要打电话。
这样做有更好的方法(来自拇指指甲下载器)
thumbs.each do |thumb|
imgSrc = thumb.css('.t_img').first['src']
file = open(imgSrc).read
agent = Mechanize.new
fop = agent.get(imgSrc)
p fop
puts "1 Driver : prowl.rb"
puts "1 Source : " + pageURL
puts "1 Title : " + thumb.css('.t_img').first['alt']
puts "1 File Source : " + imgSrc
puts "1 File Type : " + agent.head(imgSrc)["content-type"].to_s
puts "1 File Name : " + fop.filename
puts "1 Last Modified : " + agent.head(imgSrc)["last-modified"].to_s
puts "1 Image Size : " + agent.head(imgSrc)["content-length"].to_s
puts "1 MD5 : " + GetMD5(*[file.to_s])
puts "1 SHA256 : " + GetSha256(*[file.to_s])
end
所以问题是:
答案 0 :(得分:1)
agent = Mechanize.new
thumbs.each do |thumb|
imgUrl = thumb.css('.t_img').first['src']
imgTitle = thumb.css('.t_img').first['alt']
image = agent.get(imgSrc)
p image
puts "1 Driver : prowl.rb"
puts "1 Source : " + pageURL
puts "1 Title : " + imgTitle
puts "1 File Source : " + imgUrl
puts "1 File Type : " + image.header['content-type']
puts "1 File Name : " + image.filename
puts "1 Last Modified : " + image.header["last-modified"]
puts "1 Image Size : " + image.header["content-length"]
puts "1 MD5 : " + GetMD5(*[image.content.to_s])
puts "1 SHA256 : " + GetSha256(*[image.content.to_s])
end
在这里。重新使用代理,每次创建新代理都没有意义。
直接从Mechanize获取页面,无需打开并阅读然后传递内容。您要查找的所有标题信息都在您网页的header
属性中。