Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用BeautifulSoup从列表中的所有项目中获取文本_Python_Html_Beautifulsoup - Fatal编程技术网

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

Python 使用BeautifulSoup从列表中的所有项目中获取文本,python,html,beautifulsoup,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') 现在我

我编写了以下代码:

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')
现在我想将每个元素的文本(即“占位符”、“种族”)保存到一个变量中。我可以对单个变量执行此操作:

x = soup.find_all('option')[0].text
但并非所有变量都适用:

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

我知道,假设列表的大小总是相同的,这很容易做到,但我希望能够选择列表中的所有元素,而不管大小如何。这样,如果我在另一个网页上应用代码,它仍然可以工作(据我所知,该网页的下拉列表可能由7个元素组成)

而不是
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'))

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

明亮的谢谢,太棒了。非常感谢。