簡體   English   中英

使用Nokogiri“搜索”時為什么會輸出錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM