我正在尝试为 Digikey 编写一个屏幕刮板,这将使我们公司能够在零件停产时准确跟踪定价、零件可用性和产品更换。我在 Chrome Devtools 中看到的 XPATH 以及在 Firefox 上看到的 Firebug 与我的 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”,它只会返回一个 div,其中唯一重要的子节点是“cs=####”,这似乎因浏览器用户代理而异。如果我无论如何都尝试使用它(将 /cs=0 放在无法识别的浏览器的路径中),它会坚持认为我的表达式不会评估为节点集,但留下它们仍然会留下所有数据过去的问题div[2] 返回为 NULL。