[英]Why do I get bad output when using Nokogiri “search”?
我想從CarFax報告中的特定div中獲取數據。 但是,當我搜索div時,我總是得到這個奇怪的垃圾輸出。
我嘗試search(#divId)
, search(.divClass)
,甚至嘗試用search('div')
抓取所有div。 每次我得到類似的結果:div的內容被部分截斷,標簽都搞砸了。
這是我加載到我的agent
的URL: https : //gist.github.com/atkolkma/8024287
這是代碼(用戶和通過ommited):
require "rubygems"
require "mechanize"
scraper = Mechanize.new
scraper.user_agent_alias = 'Mac Safari'
scraper.follow_meta_refresh = true
scraper.redirect_ok = true
scraper.get("http://www.carfaxonline.com")
form = scraper.page.forms.first
form.j_username = "******"
form.j_password = "*****"
scraper.submit(form)
scraper.get("http://www.carfaxonline.com/api/report?vin=1G1AT58H697144202&track=true")
puts scraper.page.search("#headerBodyType")
這是我運行時文件返回的內容:
</div>4 DRderBodyType">
我的期望是:
<div id="headerBodyType"> SEDAN 4 DR </div>
最奇怪的是,如果我復制HTML源代碼,將其保存為新文件,上傳並search
它,我得到正確的輸出! 我已將復制的HTML上傳到我的chevy-pics dot com域並運行以下代碼:
scraper2 = Mechanize.new
scraper2.get("http://www.chevy-pics.com/test.html")
puts scraper2.page.search("#headerBodyType")
我按照預期將其作為輸出:
<div id="headerBodyType"> SEDAN 4 DR </div>
我可以通過編輯器將文件中的行結尾更改為Mac OS 9來重現這一點,Mac OS 9使用單個\\r
(回車)字符。 當您對結果字符串使用puts
時,每次看到此字符時,控制台都會返回到行的開頭,但不會啟動新行。 因此,每一行都會覆蓋之前的內容,並最終導致您看到的損壞的輸出。
您應該能夠通過使用p
而不是puts
來判斷是否是這種情況。 您應該看到類似"<div id=\\"headerBodyType\\">\\r SEDAN 4 DR\\r </div>"
作為輸出。 注意\\r
字符用作換行符。
從查詢中獲得的實際結果是正確的,它只是顯示導致問題的結果。 解決方案可能只是在文本上使用gsub
將\\r
轉換為更正常的\\n
。 我不知道這樣做的最佳位置,可能有可能在Mechanize交給Nokogiri進行解析之前更改整個文檔,但我不知道你是怎么做的。
您可能需要更改您獲得的任何結果,作為開始嘗試:
puts scraper.page.search("#headerBodyType").to_s.gsub("\r", "\n")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.