Вопрос по python, html-parsing, beautifulsoup – Извлечение выбранных столбцов из таблицы с помощью BeautifulSoup

11

Я пытаюсь извлечь первый и третий столбцыэта таблица данных используя BeautifulSoup. Посмотрев на HTML, первый столбец имеет тег. Другой интересующий столбец имеет тег. В любом случае, все, что яВы смогли получить список столбцов с тегами. Но я просто хочу текст.

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
Я начал с этого, но все еще не могвытащить текст. Я'Я обновлю свой ответ, чтобы включить эту часть. Может быть, это более простой путь. mac389
Я нене верю тебеЯ смогу получить весь столбец, так как HTML-представление основано на строках (хотя может и ошибаться). Я полагаю, что вы могли бы что-то аппроксимировать, перебирая строки и вытягивая соответствующий столбец, добавляя его в структуру данных по вашему выбору. RocketDonkey

Ваш Ответ

3   ответа
0

Вы также можете попробовать этот код

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)
3

ответ я думал, что яЯ опубликую альтернативное решение, которое я придумала.

 #!/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 'Ответ s, который набирает номер на веб-странице, предполагает, что вы сохранили его на своем компьютере и передали в качестве аргумента командной строки. Например:

python file.py table.html 
27

Вы можете попробовать этот код:

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 находит первую таблицу, а затем все 'тр» и выбирает первый столбец, который являетсяй»и третий столбец, который является 'тд.

Именно то, что я бы сделал. Хороший ответ. That1Guy

Похожие вопросы