Digikey用のスクリーンスクレイパーを作成しようとしています。これにより、当社は、部品が製造中止になったときに、価格設定、部品の入手可能性、および製品の交換を正確に追跡できます。Chrome DevtoolsとFirefoxのFirebugで表示されているXPATHと、C#プログラムで表示されているものとの間に不一致があるようです。
私が現在スクレイピングしているページはhttp://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=296-12602-1-NDです。
私が現在使用しているコードはかなり速くて汚いです...
//This function retrieves data from the digikey
private static List<string> ExtractProductInfo(HtmlDocument doc)
{
List<HtmlNode> m_unparsedProductInfoNodes = new List<HtmlNode>();
List<string> m_unparsedProductInfo = new List<string>();
//Base Node for part info
string m_baseNode = @"//html[1]/body[1]/div[2]";
//Write part info to list
m_unparsedProductInfoNodes.Add(doc.DocumentNode.SelectSingleNode(m_baseNode + @"/table[1]/tr[1]/td[1]/table[1]/tr[1]/td[1]"));
//More lines of similar form will go here for more info
//this retrieves digikey PN
foreach(HtmlNode node in m_unparsedProductInfoNodes)
{
m_unparsedProductInfo.Add(node.InnerText);
}
return m_unparsedProductInfo;
}
使用しているパスは「正しい」ように見えますが、リスト「m_unparsedProductInfoNodes」を見るとNULLになり続けています。
ここで何が起こっているのか分かりますか?また、baseNodeで「SelectNodes」を実行すると、ブラウザのユーザーエージェントによって異なるように見える「cs=####」だけが重要な子を持つdivのみが返されることも追加します。とにかくこれを使用しようとすると(識別できないブラウザーのパスに/ cs = 0を入れる)、式がノードセットに評価されないことを主張するフィットを提案しますが、それらを残すと、過去のすべてのデータの問題が残りますdiv[2]はNULLとして返されます。