将循环转换为列表python

时间:2017-09-28 14:51:38

标签: python list web-scraping python-requests

下面是我的代码:我试图将我从此代码中获得的循环结果转换为列表。有什么想法吗?

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)

3 个答案:

答案 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>的结果添加到列表中。