问题描述
您可以尝试以下代码:
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