使用BeautifulSoup从列表中的所有项目中获取文本

时间:2016-03-23 23:03:45

标签: python html beautifulsoup

我已经写了这段代码:

from bs4 import BeautifulSoup
import urllib2

url = "http://racing4everyone.eu/2016/03/12/formula-e-201516-round05-mexico/"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read(), "html.parser")

options = soup.find_all('option')

现在我想将每个元素的文本(即'占位符'' Race')保存到变量中。我可以为一个变量做到这一点:

x = soup.find_all('option')[0].text

但不适用于所有变量:

x = soup.find_all('option')[:].text

我知道假设列表总是大小相同很容易,但我希望能够选择列表中的所有元素而不管大小。这样,如果我在其他网页上应用代码,它仍然可以使用(该网页的下拉列表可能包含7个元素,供我所知)

1 个答案:

答案 0 :(得分:2)

而不是x = soup.find_all('option')[:].text,您应该从迭代器中的每个项目中获取文本,如下所示:

x = [x.text for x in soup.find_all('option')]

这样,您就可以从所有项目中获取文本属性。如果您希望以最有效的方式执行时间,可以使用:

import operator

x = map(operator.attrgetter("text"), soup.find_all('option'))