Ich habe einige Probleme mit dem, was als versteckte Zeilenumbruch Zeichen in Strings mit der BeautifulSoup .find-Funktion erhalten haben. Der Code, den ich habe, scannt ein HTML-Dokument und zieht Name, Titel, Firma und Land als Zeichenketten heraus. Ich tippte ein und sah, dass es sich um Saiten handelte, und wenn ich sie drucke und ihre Länge überprüfe, sieht alles wie normale Saiten aus. Aber wenn ich sie entweder in print("%s is a %s at %s in %s" % (name,title,company,country))
oder outputWriter.writerow([name,title,company,country])
schreibe, um in eine CSV-Datei zu schreiben, bekomme ich zusätzliche Zeilenumbrüche, die anscheinend nicht in den Strings vorhanden sind.BeautifulSoup Hinzufügen von unerwünschten Zeilenumbrüche zu Strings Python3.5
Was ist los? Oder kann mir jemand in die richtige Richtung zeigen?
Ich bin neu bei Python und nicht sicher, wo ich alles nachschlagen kann, was ich nicht weiß, also frage ich hier, nachdem ich den ganzen Tag damit verbracht habe, das Problem zu beheben. Ich habe über Google und einige andere Stapelüberlauf-Artikel nach Strippen versteckter Charaktere gesucht, aber nichts scheint zu funktionieren.
import csv
from bs4 import BeautifulSoup
# Open/create csvfile and prep for writing
csvFile = open("attendees.csv", 'w+', encoding='utf-8')
outputWriter = csv.writer(csvFile)
# Open HTML and Prep BeautifulSoup
html = open('WEB SUMMIT _ LISBON 2016 _ Web Summit Featured Attendees.html', 'r', encoding='utf-8')
bsObj = BeautifulSoup(html.read(), 'html.parser')
itemList = bsObj.find_all("li", {"class":"item"})
outputWriter.writerow(['Name','Title','Company','Country'])
for item in itemList:
name = item.find("h4").get_text()
print(type(name))
title = item.find("strong").get_text()
print(type(title))
company = item.find_all("span")[1].get_text()
print(type(company))
country = item.find_all("span")[2].get_text()
print(type(country))
print("%s is a %s at %s in %s" % (name,title,company,country))
outputWriter.writerow([name,title,company,country])
Ich löste mein Problem, einen weiteren Filter zu versuchen. def filter_non_printable (str): return '' .join ([c für c in str wenn ord (c)> 31 oder ord (c) == 9]) – gsears