Форматировать вывод текста терминала в виде таблицы
Мне удалось добраться до точки, где я использовал BeautifulSoup для извлечения таблицы из URL. На данный момент я хочу отформатировать вывод в виде таблицы, чтобы я мог использовать его в GeekTool.
from bs4 import BeautifulSoup
import urllib2
wiki = "https://www.google.com/maps/place?q=type:transit_station:%22145+St%22&ftid=0x89c2f67c67a250f9:0x92d51daa07480dd1"
header = {'User-Agent': 'Mozilla/5.0'} #Needed to prevent 403 error on Wikipedia
req = urllib2.Request(wiki,headers=header)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
desination = ""
eta = ""
table = soup.find("table", { "class" : "pprtjt" })
for row in table.findAll("tr"):
for cell in row.findAll("td"):
print cell.findAll(text=True)
который выводит следующее:
[u' C to 168 St ']
[u'2 min']
[u' D to Norwood - 205 St ']
[u'4 min']
[u' A to Ozone Park - Lefferts Blvd ']
[u'4 min']
[u' A to Inwood - 207 St ']
[u'5 min']
[u' D to Coney Island - Stillwell Av ']
[u'10 min']
[u' C to 168 St ']
[u'15 min']
[u' D to Norwood - 205 St ']
[u'19 min']
[u' A to Far Rockaway - Mott Av ']
[u'19 min']
[u' A to Inwood - 207 St ']
[u'20 min']
Итак, первая строка - первая строка в первом столбце, вторая - первая строка в столбце и т. Д., Например:
C to 168 St | 2 min
D to Norwood - 205 St | 4 min
A to Ozone Park - Lefferts Blvd | 4 min
A to Inwood - 207 St | 5 min
D to Coney Island - Stillwell Av | 10 min
C to 168 St | 15 min
D to Norwood - 205 St | 19 min
A to Far Rockaway - Mott Av | 19 min
A to Inwood - 207 St | 20 min
В идеале я хочу, чтобы он печатался в виде таблицы, а затем использовал всю мысль в GeekTool. Основа моего кода отсюда: http://adesquared.wordpress.com/2013/06/16/using-python-beautifulsoup-to-scrape-a-wikipedia-table/ отсюда ссылки на википедию.
Я - полный любитель в этом, поэтому извиняюсь, если это - абсолютно неправильный способ пойти по этому поводу. Заранее спасибо.
2 ответа
Я думаю, что ваш последний двойной цикл должен выглядеть так:
for row in table.findAll("tr"):
rowText = []
for cell in row.findAll("td"):
# Append every cell in this row
rowText.append(cell.findAll(text=True)[0])
# print the row joining the cells with '|'
print ' | '.join(rowText)
Посмотрите termql, это инструмент, созданный для подобных целей, хотя я не уверен, что точно понимаю ваш вывод, возможно, вам придется немного упростить его.
Руководство: http://tobimensch.github.io/termsql/
Проект: https://github.com/tobimensch/termsql
Вас может заинтересовать опция --line-as-column.