Ich benutze Beautiful Soup, um Daten aus einer HTML-Tabelle zu lesen. Warum bekomme ich kein Ergebnis vom Tisch und wie repariere ich es? Mein Code gibt "None" zurück.So lesen Sie HTML-Tabellendaten w Schöne Suppe? Rückgabe 'Keine'
Ich sehe, dass es Javascript in der Seitenquelle gibt und gelesen haben, dass ein Problem sein könnte. Die URL führt einen Bericht aus, der in die Tabelle eingegeben wird.
Ich habe soup.prettify()
verwendet, um den HTML-Code zu überprüfen, und es scheint nicht den vollständigen Quellcode zu geben. Ich bin mir nicht sicher, ob das ein Problem ist.
Hier ist der HTML-Code der Tabelle und die erste Datenreihe:
<table data-toggle="table"
data-show-columns="true"
data-show-export="true"
data-show-toggle="true"
class="table-data">
<thead>
<tr>
<th data-field="RouteId" data-sortable="true">Route ID</th>
<th data-field="RouteName" data-sortable="true">Route Name</th>
<th data-field="TripId" data-sortable="true">Trip ID</th>
<th data-field="TripName" data-sortable="true">Trip Name</th>
<th data-field="InstanceId" data-sortable="true">INST ID</th>
<th data-field="InstanceDate" data-sortable="true">INST Date</th>
<th data-field="InstanceStatus" data-sortable="true">INST Status</th>
<th data-field="InstanceCapacity" data-sortable="true">INST Cap.</th>
<th data-field="NumOrders" data-sortable="true">Num. ORDs</th>
<th data-field="OrderId" data-sortable="true">ORD ID</th>
<th data-field="OrderType" data-sortable="true">ORD Type</th>
<th data-field="OrderStatus" data-sortable="true">ORD Status</th>
<th data-field="VehicleYear" data-sortable="true">VEH Year</th>
<th data-field="VehicleMake" data-sortable="true">VEH Make</th>
<th data-field="VehicleModel" data-sortable="true">VEH Model</th>
<th data-field="VehicleRefNo1" data-sortable="true">VEH RefNo1</th>
<th data-field="vehicleVin" data-sortable="true">VEH Vin</th>
<th data-field="DriverId" data-sortable="true">DRV ID</th>
<th data-field="DriverName" data-sortable="true">DRV Name</th>
<th data-field="ScheduledPickupDateTime" data-sortable="true">Sch. Pick</th>
<th data-field="ActualPickupPickupDateTime" data-sortable="true">Act. Pick</th>
<th data-field="DeliveredDateTime" data-sortable="true">Hand. Rec.</th>
<th data-field="HandheldDateTime" data-sortable="true">Del.</th>
</tr>
</thead>
<tbody>
<tr>
<td>160</td>
<td>8 LEG: MEM to PRES</td>
<td>187</td>
<td>Trip 1 - Leg 7</td>
<td>740685</td>
<td>2017-02-01</td>
<td>Active</td>
<td>9.00000</td>
<td>9</td>
<td>9110734</td>
<td>LoadLegChild</td>
<td>InRoute</td>
<td>2015</td>
<td>Jeep</td>
<td>Patriot</td>
<td>2000047350</td>
<td>1C4NJPFBXFD318536</td>
<td>1</td>
<td>User, System</td>
<td>2017-02-01 02:05 AM</td>
<td>2017-02-01 02:20 AM</td>
<td></td>
<td></td>
</tr>
Hier ist mein Versuch mit Schöner Suppe:
from urllib.request import urlopen
from bs4 import BeautifulSoup
page = urlopen(url)
soup = BeautifulSoup(page,'lxml')
print(soup.find('table',{'class':'table-data table'}))
ich auch XPath versucht habe, aber eine leere Liste erhalten:
import requests
from lxml import html
NewPage = requests.get(url)
tree = html.fromstring(NewPage.content)
tree.xpath('//*[@id="content"]/div[2]/div[2]/div[2]/div[2]/table/tbody/tr[1]/td[1]')
UPDATE: ich denke, die tabl e Ich versuche zu verwenden ist dynamisch erstellt; Wie würde ich meinen Code ändern, um dies zu berücksichtigen? Ich habe auch versucht, find_all
zu verwenden, um meine Arbeit zu überprüfen, aber es bringt nicht jede Tabelle im HTML zurück, nur die erste. Warum ist das?
page = requests.get(url)
pageText = page.text
soup = BeautifulSoup(pageText,'lxml')
print(soup.find_all('table'))
Hier ist der Ausgang:
[<table cellpadding="0" cellspacing="0" id="Login1">
<tr>
<td>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="UserName">Username</label>
<input class="form-control" id="Login1_UserName" name="Login1$UserName" type="text"/>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="Password">Password</label>
<input class="form-control" id="Login1_Password" name="Login1$Password" type="password"/>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<input id="Login1_RememberMe" name="Login1$RememberMe" type="checkbox"/><label for="Login1_RememberMe">Remember my login</label>
</div>
<div class="col-md-6 text-right">
<input class="btn btn-default" id="Login1_Login" name="Login1$Login" type="submit" value="Login"/>
</div>
</div>
<p>
</p>
</td>
</tr>
</table>]
Interessant, dass die Tabelle, die Sie mit find_all erhalten, keine Klasse hat. Das würde erklären, warum die Versuche, mit class_ zu finden, nicht funktionieren. – rasmeister