我正在尝试使用TH作为带有以下TD标记的前导列元素。问题是该表使用了需要跳过的间歇分隔符,因为它们不包含TH标记。
这是表中的一个样本:
<tr><th scope="row">Availability (non-CRS):</th><td></td></tr>
<tr><td colspan="2" class="fieldDivider"><div> </div></td></tr>
<tr><th scope="row">Start Date:</th><td>01 Jun 2012</td></tr>
<tr><th scope="row">Expiry Date:</th><td>31 May 2015</td></tr>
<tr><th scope="row">Duration:</th><td>36 months</td></tr>
<tr><td colspan="2" class="fieldDivider"><div> </div></td></tr>
<tr><th scope="row">Total Value:</th><td>£18,720,000<i>(estimated)</i></td></tr>
我在scraperwiki中使用python来收集数据,但是我在跳过违规行时遇到了问题。
没有任何条件我的代码一旦到达没有TH标签的行就会停止,所以我当前正在使用if语句来确保我只在没有不间断空格的行上执行抓取但是我的变量(数据)未定义,因此if语句未正确执行。
这是我在教程之外的第一段编码,所以我希望答案非常简单,我只是不确定它是什么。
#!/usr/bin/env python
import scraperwiki
import requests
from bs4 import BeautifulSoup
base_url = 'http://www.londoncontractsregister.co.uk/public_crs/contracts/contract-048024/'
html = requests.get(base_url)
soup = BeautifulSoup(html.content, "html.parser")
table = soup.findAll('table')
rows = table[0].findAll('tr')
for row in rows:
th_cell = row.findAll('th')
td_cell = row.findAll('td')
if td_cell[0].get_text() == ' ':
data = {
'description' : th_cell[0].get_text(),
'record' : td_cell[0].get_text()
}
print data
答案 0 :(得分:0)
快速破解(这可能是更好的方法),但这是基于你的代码,似乎得到我想你想要的;如果我们不能:
,请尝试获取数据并处理异常data = []
for row in rows:
th_cell = row.findAll('th')
td_cell = row.findAll('td')
try:
data.append({'description': th_cell[0].get_text(),
'record' : td_cell[0].get_text()})
except IndexError:
pass
for item in data:
print data