使用BeautifulSoup从表中提取选定的列

问题描述

您可以尝试以下代码

import urllib2
from BeautifulSoup import BeautifulSoup

url = "http://www.samhsa.gov/data/NSDUH/2k10State/NSDUHSAE2010/NSDUHSAEAppC2010.htm"
soup = BeautifulSoup(urllib2.urlopen(url).read())

for row in soup.findAll('table')[0].tbody.findAll('tr'):
    first_column = row.findAll('th')[0].contents
    third_column = row.findAll('td')[2].contents
    print first_column, third_column

如您所见,代码只是连接到url并获取html,BeautifulSoup找到第一个表,然后找到所有“ tr”并选择第一列(即“ th”)和第三列,即一个“ TD”。

解决方法

我正在尝试使用BeautifulSoup提取此数据表的第一和第三列。通过查看HTML,第一列具有一个<th>标记。感兴趣的另一列具有作为<td>标记。无论如何,我所能获得的就是带有标签的列的列表。但是,我只想要文本。

table已经是列表,所以我不能使用findAll(text=True)。我不确定如何以另一种形式获得第一列的清单。

from BeautifulSoup import BeautifulSoup
from sys import argv
import re

filename = argv[1] #get HTML file as a string
html_doc = ''.join(open(filename,'r').readlines())
soup = BeautifulSoup(html_doc)
table = soup.findAll('table')[0].tbody.th.findAll('th') #The relevant table is the first one

print table