Извлечение выбранных столбцов из таблицы с помощью BeautifulSoup
Я пытаюсь извлечь первый и третий столбцы в этой таблице данных С помощью BeautifulSoup. Глядя на HTML первый столбец <th> тег. Другая колонка интереса имеет as <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
            3 ответов
вы можете попробовать этот код:
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".
в дополнение к ответу @jonhkr я думал, что опубликую альтернативное решение, которое я придумал.
 #!/usr/bin/python
 from BeautifulSoup import BeautifulSoup
 from sys import argv
 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
 data = map(lambda x: (x.findAll(text=True)[1],x.findAll(text=True)[5]),table.findAll('tr'))
 print data
В отличие от ответа jonhkr, который набирает номер на веб-странице, Мой предполагает, что у вас есть его сохранить на вашем компьютере и передать его в качестве аргумента командной строки. Например:
python file.py table.html 
вы можете попробовать этот код также
import requests
from bs4 import BeautifulSoup
page =requests.get("http://www.samhsa.gov/data/NSDUH/2k10State/NSDUHsae2010/NSDUHsaeAppC2010.htm")
soup = BeautifulSoup(page.content, 'html.parser')
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)