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 № 1Wenn 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")