下面是我的代码:我试图将我从此代码中获得的循环结果转换为列表。有什么想法吗?
import requests
from bs4 import BeautifulSoup
page = requests.get('http://forecast.weather.gov/MapClick.php?lat=37.7772&lon=-122.4168')
soup = BeautifulSoup(page.text, 'html.parser')
for x in soup.find_all(class_='tombstone-container'):
y = (x.get_text())
print (y)
答案 0 :(得分:3)
如果您不想更改大部分代码,请在循环之前创建一个空列表,如下所示
myList = []
并在你的循环中附加如下内容:
myList.append(str(x.get_text())) # EDIT2
EDIT1:
我之前使用myList.append(...)
代替myList[len(myList)]
或类似内容的原因是因为您必须使用append方法扩展已有的新内容列表。
EDIT2:
关于列表中无指针的问题:
如果您的列表在for循环后打印时看起来像[None, None, ...]
,那么您现在可以确定您还有一个字符串列表,并且它们包含单词None(如此['None','None',...]
)。
这意味着,您的x.get_text()
方法没有返回任何字符串,而是从头开始返回无指针。换句话说,你的错误将被埋没在其他地方。
以防万一。一个完整的例子是:
myList = []
for x in soup.find_all(class_='tombstone-container'):
# do stuff, but make sure the content of x isn't modified
myList.append(str(x.get_text()))
# do stuff
答案 1 :(得分:2)
只是循环它。
map(lambda x: x.get_text(), soup.find_all(class_='tombstone-container'))
答案 2 :(得分:2)
将for
循环的结果转换为列表的简单方法是 list comprehension 。
我们可以转换:
for x in soup.find_all(class_='tombstone-container'):
y = (x.get_text())
print (y)
成:
result = [x.get_text() for x in soup.find_all(class_='tombstone-container')]
Basic(列表理解具有更高级的语法)具有语法:
[<expr> for <var> in <iterable>]
它构造一个列表,Python将迭代<iterable>
并将值分配给<var>
,它为<var> in <iterable>
<expr>
的结果添加到列表中。