/ / Python-Dateiname, kein Markup. öffne diese Datei und übergebe das Dateihandle an Beautiful Soup - python-2.7, beautifulsoup

Python-Dateiname, nicht Markup. Öffnen Sie diese Datei und übergeben Sie den Dateihandle in Beautiful Soup - python-2.7, beautifulsoup

Ich habe meine Python 2.7-Routine so geändert, dass sie einen Dateipfad als Parameter für die Routine akzeptiert, damit ich keinen Code duplizieren muss, indem ich mehrere Dateipfade in die Methode einfüge.

Beim Aufruf meiner Methode erhalte ich folgende Fehlermeldung:

looks like a filename, not markup. You should probably open this file and pass the filehandle into Beautiful Soup.
""%s" looks like a filename, not markup. You should probably open this file and pass the filehandle into Beautiful Soup." % markup)

Meine Methodenimplementierung ist:

def extract_data_from_report3(filename):
html_report_part1 = open(filename,"r").read()
soup = BeautifulSoup(filename, "html.parser")
th = soup.find_all("th")
td = soup.find_all("td")

headers = [header.get_text(strip=True) for header in soup.find_all("th")]
rows = [dict(zip(headers, [td.get_text(strip=True) for td in row.find_all("td")]))
for row in soup.find_all("tr")[1:-1]]
print(rows)
return rows

So rufen Sie die Methode auf:

rows_part1 =  report.extract_data_from_report3(r"E:test_runnersselenium_regression_test_5_1_1TestReportSeleniumTestReport_part1.html")
print "part1 = "
print rows_part1

Wie kann ich den Dateinamen als Parameter übergeben?

Antworten:

5 für die Antwort № 1

Wenn Sie ein Dateihandle übergeben möchten, rufen Sie read nicht auf, sondern übergeben Sie es open(filename) oder das Dateihandle ohne Aufruf von read:

def extract_data_from_report3(filename):
html_report_part1 = open(filename,"r")
soup = BeautifulSoup( html_report_part1, "html.parser")

Oder:

def extract_data_from_report3(filename):
soup = BeautifulSoup(open(filename), "html.parser")

Sie können durch html_report_part1 nach dem aufruf von read kann beautifulsoup ein dateiobjekt nehmen.


2 für die Antwort № 2

Sie sollten den tatsächlichen Inhalt der Datei übergeben, in die Sie gelesen haben BeautifulSoup :

html_report_part1 = open(filename,"r").read()
soup = BeautifulSoup(html_report_part1, "html.parser")