2017-10-19 4 views
2

Ich habe ein Skript in Python geschrieben, um etwas Text aus einigen HTML-Elementen zu entfernen. Das Skript, das ich geschrieben habe, kann es analysieren. Das Problem besteht jedoch darin, dass die Daten mit großen Abständen zwischen ihnen analysiert werden. Ich versuchte mit .strip() Methode, aber es hatte keine Auswirkungen auf das Ergebnis. Wie kann ich es reparieren?Zwischen den Ergebnissen können keine großen Leerzeichen entfernt werden

die HTML-Elemente:

html=""" 
<div class="organisation-details"> 

    <div class="personnel shaded"> 
         <h3>KEY PERSONNEL</h3> 
         <p> 
           Director: Andrew Bickerton<br> 
           Director: Andrew Connor<br> 
           Office Manager: Tom Marchant<br> 
         </p> 
        </div> 

    <div class="company-type shaded"> 
         <h3>COMPANY TYPE</h3> 
         <p> 
                 Importer 
         </p> 
        </div> 

    <div class="company-details shaded"> 
         <h3>COMPANY DETAILS</h3> 
         <p> 
           Year Established: 1984 <br> 
                 VAT No: GB 413 3611 93<br> 
                 No of Employees: 1-20<br> 
         </p> 
        </div> 


</div> 
""" 

Dieses Skript:

from lxml.html import fromstring 

tree = fromstring(html) 
for title in tree.cssselect(".organisation-details"): 
    key = title.cssselect("h3:contains('KEY PERSONNEL')+p")[0].text_content().strip() 
    details = title.cssselect("h3:contains('COMPANY DETAILS')+p")[0].text_content().strip() 
    ctype = title.cssselect("h3:contains('COMPANY TYPE')+p")[0].text_content().strip() 
    print(key,details,ctype) 

Der Ausgang Ich habe:

Director: Andrew Bickerton 
           Director: Andrew Connor 
           Office Manager: Tom Marchant Year Established: 1984 
                 VAT No: GB 413 3611 93 
                 No of Employees: 1-20 Importer 

Das Ergebnis bin ich nach (oder etwas näher) :

Director: Andrew Bickerton 
Director: Andrew Connor 
Office Manager: Tom Marchant 
Year Established: 1984 
VAT No: GB 413 3611 93 
No of Employees: 1-20 
Importer 

Antwort

2

Das Problem ist, dass key, details und ctype mehrere Zeilen und Leerzeichen in der Mitte der Zeichenfolgen enthalten. Sie müssen diese auf Newline teilen und jedes Element ausziehen. Etwas wie:

for piece in key.split('\n'): 
    print(piece.strip()) 

und wiederholen Sie für details und ctype.

+0

Sie sind das Juwel, Mann. Es hat den Trick gemacht. Danke vielmals. – SIM

0

Wenn Ihnen ein Browser diesen HTML-Code präsentiert, werden externe Leerzeichen am Anfang und Ende der Strings nicht beachtet. Python (oder jede andere Programmiersprache) nimmt Leerstellen in Strings wörtlich. Zufälligerweise war ich erst gestern in einer ähnlichen Situation ratlos.

Verwandte Themen