如何在Python中提取HTML表格的第二列?
<table style="width:300px" border="1">
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
<tr>
<td>ABC</td>
<td>abcd</td>
<td>80</td>
</tr>
<tr>
<td>EFC</td>
<td>efc</td>
<td>80</td>
</tr>
</table>
我想在Python中获取第二列的所有
import urllib2
from bs4 import BeautifulSoup
url = "http://ccdsiu.byethost33.com/magento/adamo-13.html"
text = urllib2.urlopen(url).read()
soup = BeautifulSoup(text)
data = soup.findAll('div',attrs={'class':'madhu'})
for div in data:
trdata = div.findAll('tr')
tddata = div.findAll('td')
for trr in trdata:
print trr
我正在尝试从上面的代码中获取数据。它打印出了表格中的所有
3 个回答
0
你不需要一个一个去遍历你的 td
元素。可以直接使用这个:
for div in data:
trdata = div.findAll('tr')
tddata = div.findAll('td')
if len(tddata) >= 2:
print tddata[1]
列表的索引是从0开始的。我会检查 list
的 length
,以确保第二个 td
是存在的。
0
其实你想要的并不太清楚,因为你给的HTML例子并没有什么关系,而你提到的第二列的tds
也没有太大帮助。无论如何,我对Elmo的回答做了一些修改,给你提供了重要性标题,然后是每个东西的实际重要性等级。
for div in data:
trdata = div.findAll('tr')
tddata = div.findAll('td')
count = 0
for i in range(0, len(tddata)):
if count % 6 == 0:
print tddata[count + 1]
count += 1
1
我觉得你不能像你提到的那样用BeautifulSoup来使用xpath。不过,Python自带的lxml
模块可以做到这一点。
from lxml import etree
table = '''
<table style="width:300px" border="1">
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
<tr>
<td>ABC</td>
<td>abcd</td>
<td>80</td>
</tr>
<tr>
<td>EFC</td>
<td>efc</td>
<td>80</td>
</tr>
</table>
'''
parser = etree.HTMLParser()
tree = etree.fromstring(table, parser)
results = tree.xpath('//tr/td[position()=2]')
print 'Column 2\n========'
for r in results:
print r.text
运行后会打印出
Column 2
========
Doe
abcd
efc