2016-06-23 12 views
3

Ich versuche, eine Website zu kratzen, und ich renne in das Problem, wo, mit Request JS, ich eine HTML-Zeichenfolge bekomme ich an Cheerio übergeben .Cheerio nicht bestimmte Elemente, die in HTML-Zeichenfolge vorhanden sind

Das verwirrende Teil ist Teile gibt es, die in der HTML-String existieren, die ich zu kratzen bin versucht, aber wenn ich Cheerio verwenden, um zu versuchen, sie zu kratzen, kann sie es nicht finden, obwohl es sie gibt ...

Zum Beispiel gibt es eine Tabelle mit einer ID in der letzten Zeile einer anderen Tabelle, und ich würde erwarten, dass, durch die Verwendung dieser ID als Selektor, ich alle Kinder TRs bekommen könnte, aber stattdessen was ich Ich bekomme den ersten TR, dann noch einen mit einem TD, dann ein abruptes Schließen des zweiten TR und schließe dann den Tag für den Tisch.

Von console.logging die HTML-Zeichenfolge vor dem Senden an cheerio.load, kann ich sehen, gibt es offensichtlich mehr Informationen in diesem zweiten TR, gefolgt von mehreren anderen TRs vor dem Schließen dieser Tabelle. Aber wenn ich es durch Cheerio renne, ist es nicht das, was es mir sagt.

Blick auf den Rest des es gerade (obwohl keine Ahnung, ob dies signifikant ist oder nicht ...) Ich bemerke, es hat href="javascript:void(0)" drin - könnte etwas wie das Cheerio aus sein?

Vielen Dank für jede Hilfe.

Bei weiterer Untersuchung, wenn ich einen Selektor wie 'td:contains("this text")' verwende, dann wird dies angezeigt. Aber nicht anders, soweit ich das beurteilen kann.

Auch das Javascript: void (0) verursachte das Problem nicht, ich benutzte eine Regex, um alle Instanzen davon zu entfernen, und immer noch das Geheimnis.

Antwort

1

Es stellt sich heraus, dass der Code mit einem Fehler geschrieben wurde, vielleicht in den Bemühungen, Abschaben zu verhindern. Es gab ein Tag <font>, das mit einem </div> geschlossen wurde, und das brach irgendwie die Parsing-Fähigkeit von cheerio.

html = html.replace(/[<]font size[=]["]1["][>]\d[<]\/div[>]/g, ""));

Verwandte Themen