[英]How to read HTML table data w Beautiful Soup? Returning 'None'
我正在使用Beautiful Soup从HTML表读取数据。 为什么我不能从表格中得到结果,如何解决? 我的代码返回“无”。
我看到页面源代码中有JavaScript,并且已阅读,可能是一个问题。 该url运行一个输入到表中的报告。
我已经使用了soup.prettify()
来检查HTML,但它似乎没有提供完整的源代码。 我不确定这是否是问题。
这是表格的HTML和第一行数据:
<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>
这是我尝试美丽汤的尝试:
from urllib.request import urlopen
from bs4 import BeautifulSoup
page = urlopen(url)
soup = BeautifulSoup(page,'lxml')
print(soup.find('table',{'class':'table-data table'}))
我也尝试过xpath但收到一个空列表:
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]')
更新:我在想我要使用的表是动态创建的; 我将如何更改我的代码以解决此问题? 我也尝试过使用find_all
检查我的工作,但它不会带回HTML中的每个表,只会带回第一个表。 为什么是这样?
page = requests.get(url)
pageText = page.text
soup = BeautifulSoup(pageText,'lxml')
print(soup.find_all('table'))
这是输出:
[<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>]
在我看来,您似乎正在混淆旧版本的漂亮汤和新版本中使用的旧表格。
我会尝试: soup.find("table", class_="table-data")
这是新版美丽汤的语法。 希望这就是您正在使用的。
我没有安装漂亮的汤,所以无法验证,但是您可以尝试一下。
查找呼叫中有一个错误 。
您正在搜索同时具有表数据 和表类的表元素。 但是,如您所见,该表仅具有类table-data ,而不具有表一。 将代码替换为:
print(soup.find('table',{'class':'table-data'}))
更新 :好像您在更新中所说的,网页是动态创建的。 因此,请打印完整的HTML网页(或将其保存到文件中)并解决该代码( 不要使用您在Google Chrome浏览器或其他浏览器检查器中看到的代码 ,它们会在加载文档后生成一些代码。)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.