Ruby 使用Nokokiri和Pismo进行数据刮取
我正在使用一个小应用程序来保存书签。我使用Nokogiri和Pismo(分别)抓取网页以获取标题标签 Nokogiri不保存日语、汉语、俄语或任何带有不寻常字符的语言,而Pismo则从这些语言中保存这些字符,但速度有点慢,而且它不像Nokogiri那样保存标题信息 有谁能推荐一种更好的gem或更好的保存数据的方法吗Ruby 使用Nokokiri和Pismo进行数据刮取,ruby,ruby-on-rails-4,web-crawler,nokogiri,Ruby,Ruby On Rails 4,Web Crawler,Nokogiri,我正在使用一个小应用程序来保存书签。我使用Nokogiri和Pismo(分别)抓取网页以获取标题标签 Nokogiri不保存日语、汉语、俄语或任何带有不寻常字符的语言,而Pismo则从这些语言中保存这些字符,但速度有点慢,而且它不像Nokogiri那样保存标题信息 有谁能推荐一种更好的gem或更好的保存数据的方法吗 doc = Nokogiri::HTML(open(bookmark_params[:link])) @bookmark = current_user.bookmarks.buil
doc = Nokogiri::HTML(open(bookmark_params[:link]))
@bookmark = current_user.bookmarks.build(bookmark_params)
@bookmark.title = doc.title.to_s
这就是我所说的“怪人”
如果我在下面的链接中使用nokogiri来扫描页面标题
youtube.com/watch?v=QXAwnMxlE2Q这就是我得到的 NTV采访在日本的外国人 但使用pismo gem这就是我得到的 NTV采访在日本的外国人日テレ外人街頭インタビュー 英文字幕英語字幕
这就是我想要的实际结果。但是gem有点慢。根据我的经验,如果Nokogiri、RestClient或其他web抓取gem出现编码问题,它有助于找到文档所使用的编码 此信息通常位于元标记处:
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
并尝试:
doc.force_encoding('Windows-1251').encode('UTF-8')
doc = Nokogiri.XML(open-uri(http://example.com), nil, 'Windows-1251')
require 'nokogiri'
require 'open-uri'
open("https://www.youtube.com/watch?v=QXAwnMxlE2Q") {|f|
p f.content_type # "text/html"
p f.charset # "UTF-8"
p f.content_encoding # []
}
doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q"))
puts doc.title.to_s # => NTV interview foreigners in Japan æ¥ãã¬å¤äººè¡é ã¤ã³ã¿ãã¥ã¼ English Subtitles è±èªåå¹ - YouTube
doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q").read)
puts doc.title.to_s # => NTV interview foreigners in Japan 日テレ外人街頭インタビュー English Subtitles 英語字幕 - YouTube
如果您知道内容始终是UTF-8,您当然可以:
doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q"), nil, "UTF-8")
你说Nokogiri不保存“怪异”角色是什么意思?添加一个与此重复的HTML示例。另外,你能为你的问题找到一个更好的标题来说明问题吗?这有助于人们选择要处理的问题。请使用该信息更新您的问题,而不是将其添加为注释。当我们回答时,能够从一个地方,一个问题,寻找我们需要知道的一切,这对我们帮助很大。请确保对其进行格式化,使其易于阅读。非常感谢。
doc = Nokogiri::HTML(open("https://www.youtube.com/watch?v=QXAwnMxlE2Q"), nil, "UTF-8")