HTML Agility Pack屏幕刮擦XPATH不返回数据

c# html-agility-pack screen-scraping web-scraping

我正在尝试为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。

热门答案

只是为了更新:

我从c#切换到更友好的Python(我的编程经验是asm,c和python,整个OO都是全新的)并设法纠正我的xpath问题。标签确实是问题,但幸运的是它是独一无二的,所以有点正规表达和删除线,我的状态很好。我不确定为什么这样的标签打破了XPATH。如果有人有一些见解,我想听听。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow