HTML Agility Pack Screen Scraping XPATH no está devolviendo datos

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

Pregunta

Estoy intentando escribir un raspador de pantalla para Digikey que permitirá a nuestra compañía mantener un seguimiento preciso de los precios, la disponibilidad de las piezas y los reemplazos de productos cuando se suspende una pieza. Parece que hay una discrepancia entre el XPATH que veo en Chrome Devtools y Firebug en Firefox y lo que mi programa de C # está viendo.

La página que estoy raspando actualmente es http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=296-12602-1-ND

El código que estoy usando actualmente es bastante rápido y sucio ...

   //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;
   }

Aunque la ruta que estoy usando parece ser "correcta" sigo obteniendo NULL cuando veo la lista "m_unparsedProductInfoNodes"

¿Alguna idea de lo que está pasando aquí? También agregaré que si hago un "SelectNodes" en el baseNode, solo devuelve un div con el único elemento secundario significativo que es "cs = ####" que parece variar según los agentes de usuario del navegador. Si trato de usar esto de alguna manera (poniendo / cs = 0 en la ruta para el navegador no identificable) esto encaja en un ajuste insistiendo en que mi expresión no se evalúa en un conjunto de nodos, pero dejarlos todavía deja el problema de todos los datos pasados div [2] se devuelve como NULL.

Respuesta popular

Sólo para una actualización:

Cambié de c # a un Python un poco más amigable (mi experiencia con la programación es asm, c, y python, todo fue totalmente nuevo) y logré corregir mis problemas con xpath. La etiqueta era, de hecho, el problema, pero afortunadamente es única, por lo que una pequeña expresión regular y una línea eliminada y estaba en buena forma. Aunque no estoy seguro de por qué una etiqueta como esa rompe el XPATH. Si alguien tiene alguna idea, me gustaría escucharla.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué