Ich habe diesen HTML:Wie wähle ich alle untergeordneten Texte aus, aber ohne ein Tag mit Scapys XPath?
<div id="content">
<h1>Title 1</h1><br><br>
<h2>Sub-Title 1</h2>
<br><br>
Description 1.<br><br>Description 2.
<br><br>
<h2>Sub-Title 2</h2>
<br><br>
Description 1<br>Description 2<br>
<br><br>
<div class="infobox">
<font style="color:#000000"><b>Information Title</b></font>
<br><br>Long Information Text
</div>
</div>
Ich möchte alle Texte in <div id="content">
mit XPath in Scrapy zu bekommen, aber <div class="infobox">
‚s Inhalt auszuschließen, so ist das erwartete Ergebnis wie folgt aus:
Title 1
Sub-Title 1
Descripton 1.
Descripton 2.
Sub-Title 2
Descripton 1.
Descripton 2.
Aber ich Ich habe noch nicht den ausschliessenden Teil erreicht, ich kämpfe immer noch um den Text von <div id="content">
.
Ich habe dies versucht:
response.xpath('//*[@id="content"]/text()').extract()
Aber es gibt nur Description 1.
und Description 2.
von beiden Sub-Titel.
Dann habe ich versucht:
response.xpath('//*[@id="content"]//*/text()').extract()
Es nur Title 1
zurückkehrt, Sub-Title 1
, Sub-Title 2
, Information Title
und Long Information Text
.
So gibt es zwei Fragen hier:
- Wie kann ich alle von Kindern Text von
content
div bekommen? - Wie kann das div von der Auswahl ausgeschlossen werden?
Hallo, danke für deine Antwort. Aber Ihre Ausschlusslösung funktioniert nicht, wenn das 'infobox'-div ein anderes untergeordnetes Element enthält, siehe mein editiertes HTML-Beispiel oben. – null
@suud Ich habe meine Antwort bearbeitet. Wenn Sie 'ancestor ::' anstelle von 'parent :: 'verwenden, ignoriert der Ausdruck jeglichen Text innerhalb der Infobox, egal ob er sich in einem anderen Element befindet. –
Danke, das hat mein Problem gelöst. Was ich brauchte, war '// div [@ class =" body "]/descendant :: text() [nicht (ancestor :: script)]' (als Beispiel) – saeedgnu