Извлечение выбранных столбцов из таблицы с помощью 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)