2016-04-19 10 views
3

初めてX線モジュールを使用しています。不正なフォーマットHTMLコードをX線でスクラップする方法

私はそれを使用するのに問題はありませんが、不正なフォーマットのHTMLコードでデータをスクラップしようとするといくつか問題があります。例えば

、私はウェブサイトから、このHTMLコードを廃止しようとした場合:

:私は次のような結果を得る

x(html, '.item', [{ 
    tags: x('.item', 'dd:nth-child(1)') 
}]) 
(function(err, obj) { 
    var jsonCleaned = JSON.parse(JSON.stringify(obj).replace(/"\s+|\s+"/g,'"').replace(/\\n/g, '')) 
    res.json(jsonCleaned); 
}) 

:このコードを使用して

<div class="item"> 
<dl class="list"> 
    <dd id="1"> Data1 
    <dd id="2"> Data2 
    <dd id="3"> Data3 
</dl> 

[ 
     { 
       "tags": "Data1 Data2 Data3" 
     } 

]

私のスクレイピングコードは、DDタグが閉じている場合に機能します。

[ 
     { 
       "tags": "Data1" 
     } 
] 

この問題の解決方法はありますか?

+0

私は、X線ライブラリが必要なHTMLを処理できない場合、唯一の解決策は、別のlibを試すか、HTMLをいくつかの他のlib( "整頓された "など)。 –

+0

ところで、PhantomJSトランスポートを使用していますか? PhantomJSはこのようなHTMLを問題なく処理できるはずです。 –

+0

こんにちは@AndrewDunai、あなたの助けに感謝します。今のところ、私はPhantomJSを使用していません。しかし、私はこのモジュールhttps://github.com/lapwinglabs/x-ray-phantomを試してみると、おそらく役に立つだろう:)再びありがとう –

答えて

0

将来同じ問題が発生した場合、私自身の解決策です。

私はちょうどhtmltidyモジュールを使用します。

tidy(html, function (err, html) { 
    x(html, '.item', [{ 
     tags: x('.item', 'dd:nth-child(1)') 
    }]) 
    (function(err, obj) { 
     var jsonCleaned = JSON.parse(JSON.stringify(obj).replace(/"\s+|\s+"/g,'"').replace(/\\n/g, '')); 
     res.json(jsonCleaned); 
    }) 
}); 

その後、HTMLコードのフォーマットが正しくないことはもはや問題にはなりません。

関連する問題