Понимание списка облегчит задачу:
table = soup.find("table", id = "history")
rows = table.findAll('tr')
data = [[td.findChildren(text=True) for td in tr.findAll("td")] for tr in rows]
# data now contains:
[[u'Google', u'07/11/2001'],
[u'Apple', u'27/08/2001'],
[u'Microsoft', u'01/11/1991']]
# If the data may contain extraneous whitespace you can clean it up
# Additional processing could also be done - but once you hit much more
# complex than this later maintainers, yourself included, will thank you
# for using a series of for loops that call clearly named functions to perform
# the work.
data = [[u"".join(d).strip() for d in l] for l in data]
# If you want to store it joined as name | company
# then simply follow that up with:
data = [u"|".join(d) for d in data]
Понимание списка в основном является обратным for
циклом с агрегацией:
[[td.findNext(text=True) for td in tr.findAll("td")] for tr in rows]
переводится в *:
final_list = []
intermediate_list = []
for tr in rows:
for td in tr.findAll("td")
intermediate_list.append(td.findNext(text=True))
final_list.append(intermediate_list)
intermediate_list = []
data = final_list
* Грубо - мы не учитываем удивительность, связанную с генераторами , а не при создании промежуточных списков, поскольку я не могу сейчас добавить генераторы, не загромождая пример ,