2016-08-18 4 views
0

Ich versuche, Daten von einer alten HTML-Seite zu bekommen.Scrapy1.1/Python3 String aus der Zeichenfolge entfernen

Python3 Debian Scrapy 1.1

ich sehe haben ein paar Beispiel dafür, was ich versuche, hier zu tun, aber aus einem Grund, verstehe ich nicht, dass ich nicht in der Lage bin mit meinen Ergebnissen zu reproduzieren :

die Info-I ist der Kontakt Name erhalten möchten hier (John Doe)

<p><strong>Contact: <a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a> John Doe</strong></p> 

ich in der Lage bin zurück mit Scrapy:

Contact: [u'Contact: ', u' John Doe'] 

Das einzige Problem ist, dass der „Kontakt:“ Teil in meiner CSV-Datei geschrieben wird ...

Contact: , John Doe 

ich ein paar regex und spiele mit den Variablen versucht, aber ich habe immer zu ein weiteres Problem.

Dies ist, was ich verwende die Daten zu erhalten:

item['Contact'] = response.xpath('//*[@id="main-contain"]/div[2]/div/div[6]/p[10]/strong/text()').extract() 

ich auch mit .replace versucht(), aber ich am Ende mit

[u'', u' John Doe'] 

Antwort

0

So einfach schließlich

Meine Variable enthält eine Liste. Ich muss auf etwas in meiner Liste .replace().

Kontakt [1] .replace ("Contact", "")

fixiert alles

0

Sie haben ein paar Optionen auf der von der Website verwendeten Muster je den Kontakt zu repräsentieren:

In [1]: import scrapy 

In [2]: selector = scrapy.Selector(text='<p><strong>Contact: <a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a> John Doe</strong></p>') 
    ...:  

In Ihrem Beispiel das strong Element hat 3 Kinder: 1 Textknoten, einen Link und einen anderen Textknoten:

In [3]: selector.xpath('.//p/strong/node()').extract() 
Out[3]: 
['Contact: ', 
'<a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a>', 
' John Doe'] 

Die XPath verwenden Sie Filter auf sofortige Kinder, die Textknoten sind:

In [4]: selector.xpath('.//p/strong/text()').extract() 
Out[4]: ['Contact: ', ' John Doe'] 

Sie können die letzte auswählen [last()] Prädikat mit:

In [5]: selector.xpath('.//p/strong/text()[last()]').extract() 
Out[5]: [' John Doe'] 

Scrapy Wähler haben ein .extract_first() Verfahren eine einzige zu erhalten Wert (oder Kein) anstelle der Standardliste, die Sie mit .extract() erhalten:

Ferner können Sie mit XPath normalize-space():

In [7]: selector.xpath('normalize-space(.//p/strong/text()[last()])').extract_first() 
Out[7]: 'John Doe' 
die führenden Leerzeichen loswerden
Verwandte Themen