Ich habe Probleme beim Parsen einer KML-Datei (XML) mit schönen Suppe. Dieser Code-Snippet sollte für jede Ebene lxml kehrt in meinem Beispiel 2 Tabellen XML-Parser liefert 0 eine nicht Null Anzahl von Iterationen hat und die Zahl sollte 3Parsing KML mit schöner Suppe
from bs4 import BeautifulSoup
url = "sample.kml"
with open(url,'r') as page:
soup = BeautifulSoup(page, "lxml")
tables = soup.find_all('table')
print(len(tables))
for table in tables:
rows = table.find_all('tr')
for row in rows:
cols = row.find_all('td')
Das erste Beispielskript anstelle von 3 gibt 2 Tabellen verwenden Lxml und 0 mit XML-Parser.
soup = BeautifulSoup(page, "xml")
placemark = soup.find_all('Placemark')
print(len(placemark))
for place in placemark:
tables = place.find_all('table')
print(len(tables))
for table in tables:
rows = table.find_all('tr')
for row in rows:
cols = row.find_all('td')
den Baum durchquert ich ursprünglich für Tabellen begann die Suche, die len (Tabellen) 2 zurück, die ich kenne, falsch sein sollte etwa 92.000 so fand ich einen anderen Tag zu starten Baum Schreiten durch die wurde (richtige Anzahl zurück), und versuchte dann, die Reihen und Spalten innerhalb jedes Etiketts zu finden, von denen sie alle Null zurückgaben, was mich überraschte. Ich spielte mit verschiedenen Parsern herum und stellte schließlich fest, dass xml die richtige war, konnte aber immer noch nicht die richtige Menge an Tabellen finden, obwohl ich sie mit re.search finden oder in erhabenem Text suchen konnte könnte gekapselt sein, aber ohne Erfolg. Ich bin ziemlich fest und scheint einen Weg zu finden, auf die 92.000 Tabellen zuzugreifen, indem ich die find_all ("TAG") Methode benutze. irgendwelche Vorschläge?
Beispiel KML
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document id="laaSECS" xsi:schemaLocation="http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd http://www.google.com/kml/ext/2.2 http://code.google.com/apis/kml/schema/kml22gx.xsd">
<name>laaSECS</name>
<Snippet maxLines="0"></Snippet>
<Style id="PolyStyle00">
<LabelStyle>
<color>00000000</color>
<scale>0</scale>
</LabelStyle>
<LineStyle>
<color>ff7f5555</color>
<width>0.2</width>
</LineStyle>
<PolyStyle>
<color>ffc5d9fa</color>
<fill>0</fill>
</PolyStyle>
</Style>
<Style id="PolyStyle000">
<LabelStyle>
<color>00000000</color>
<scale>0</scale>
</LabelStyle>
<LineStyle>
<color>ff7f5555</color>
<width>0.2</width>
</LineStyle>
<PolyStyle>
<color>ffc5d9fa</color>
<fill>0</fill>
</PolyStyle>
</Style>
<StyleMap id="PolyStyle001">
<Pair>
<key>normal</key>
<styleUrl>#PolyStyle00</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#PolyStyle000</styleUrl>
</Pair>
</StyleMap>
<Folder id="FeatureLayer0">
<name>laaSECS</name>
<Snippet maxLines="0"></Snippet>
<Placemark id="ID_00000">
<name>AL</name>
<Snippet maxLines="0"></Snippet>
<description><![CDATA[<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body style="margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;">
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px">
<tr style="text-align:center;font-weight:bold;background:#9CBCE2">
<td>AL</td>
</tr>
<tr>
<td>
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
<tr>
<td>FID</td>
<td>0</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>STATE</td>
<td>AL</td>
</tr>
<tr>
<td>MER</td>
<td>25</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>TWP</td>
<td>22</td>
</tr>
<tr>
<td>TDIR</td>
<td>N</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>RNG</td>
<td>4</td>
</tr>
<tr>
<td>RDIR</td>
<td>W</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>SEC</td>
<td>24</td>
</tr>
<tr>
<td>MODDATE</td>
<td>20050311</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>DATUM</td>
<td>NAD27</td>
</tr>
<tr>
<td>SOURCE</td>
<td>WhiteStar</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>MTR</td>
<td>25 22.0N 4.0W</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>]]></description>
<styleUrl>#PolyStyle001</styleUrl>
<MultiGeometry>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-88.35570867858526,32.86011073571817,0 -88.35570870147141,32.86253443065814,0 -88.35597594524225,32.86011537400984,0 -88.35570867858526,32.86011073571817,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</MultiGeometry>
</Placemark>
<Placemark id="ID_00001">
<name>AL</name>
<Snippet maxLines="0"></Snippet>
<description><![CDATA[<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body style="margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;">
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px">
<tr style="text-align:center;font-weight:bold;background:#9CBCE2">
<td>AL</td>
</tr>
<tr>
<td>
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
<tr>
<td>FID</td>
<td>1</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>STATE</td>
<td>AL</td>
</tr>
<tr>
<td>MER</td>
<td>25</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>TWP</td>
<td>22</td>
</tr>
<tr>
<td>TDIR</td>
<td>N</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>RNG</td>
<td>4</td>
</tr>
<tr>
<td>RDIR</td>
<td>W</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>SEC</td>
<td>25</td>
</tr>
<tr>
<td>MODDATE</td>
<td>20050311</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>DATUM</td>
<td>NAD27</td>
</tr>
<tr>
<td>SOURCE</td>
<td>WhiteStar</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>MTR</td>
<td>25 22.0N 4.0W</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>]]></description>
<styleUrl>#PolyStyle001</styleUrl>
<MultiGeometry>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-88.35597594524225,32.86011537400984,0 -88.3567389068841,32.85292852502473,0 -88.35768486975799,32.84508568993779,0 -88.35570853700197,32.84511675513796,0 -88.35570867858526,32.86011073571817,0 -88.35597594524225,32.86011537400984,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</MultiGeometry>
</Placemark>
<Placemark id="ID_00002">
<name>AL</name>
<Snippet maxLines="0"></Snippet>
<description><![CDATA[<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body style="margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;">
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px">
<tr style="text-align:center;font-weight:bold;background:#9CBCE2">
<td>AL</td>
</tr>
<tr>
<td>
<table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
<tr>
<td>FID</td>
<td>2</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>STATE</td>
<td>AL</td>
</tr>
<tr>
<td>MER</td>
<td>25</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>TWP</td>
<td>22</td>
</tr>
<tr>
<td>TDIR</td>
<td>N</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>RNG</td>
<td>4</td>
</tr>
<tr>
<td>RDIR</td>
<td>W</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>SEC</td>
<td>36</td>
</tr>
<tr>
<td>MODDATE</td>
<td>20050311</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>DATUM</td>
<td>NAD27</td>
</tr>
<tr>
<td>SOURCE</td>
<td>WhiteStar</td>
</tr>
<tr bgcolor="#D4E4F3">
<td>MTR</td>
<td>25 22.0N 4.0W</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>]]></description>
<styleUrl>#PolyStyle001</styleUrl>
<MultiGeometry>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-88.35768486975799,32.84508568993779,0 -88.35843183642189,32.83843382961495,0 -88.35914980106479,32.83165897171819,0 -88.35908878782671,32.83049899571662,0 -88.35570839957039,32.83056244880483,0 -88.35570853700197,32.84511675513796,0 -88.35768486975799,32.84508568993779,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</MultiGeometry>
</Placemark>
<Placemark id="ID_00003">
<name>AL</name>
<Snippet maxLines="0"></Snippet>
<description><![CDATA[<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
Link zum originalfile KML FILE
Bitte stellen Sie ein kleines XML-Beispiel zur Verfügung, das das Problem veranschaulicht. Eine 175-MB-Datei ist nicht Teil eines [mcve]! – miken32
OK @ miken32 Ich habe es auf 500 Zeilen gebracht –