我正在尝试将网络数据读入列表。问题是我需要考虑的数据中有空白点。
例如,对于下面的数据,我希望最终输出为类似以下的列表:
德克萨斯州普莱诺
纽约,纽约
科罗拉多州丹佛
NA
伊利诺伊州芝加哥
加利福尼亚旧金山
<span itemprop="addressLocality">Plano, TX</span>
<span itemprop="addressLocality">New York, NY</span>
<span itemprop="addressLocality">Denver, CO</span>
<span itemprop="addressLocality"></span>
<span itemprop="addressLocality">Chicago, IL</span>
<span itemprop="addressLocality">San Francisco, CA</span>
目前,我正在尝试打印结果以进行验证,然后再将其添加到列表中,我的代码如下:
for span in div.find('span', {'itemprop':'addressLocality'}):
if span:
print(span)
else:
print('NA')
此代码为我提供了以下输出,该输出未说明空标记:
德克萨斯州普莱诺
纽约,纽约
科罗拉多州丹佛
伊利诺伊州芝加哥
加利福尼亚州旧金山
我刚刚开始学习Python和Beautiful Soup。
我尝试过if..else的变体;尝试:...除了:和.contents。我敢肯定这很简单。
任何建议将不胜感激。
答案 0 :(得分:0)
您应该使用find_all
,它返回找到的标签的所有实例。 find
仅返回找到的第一个。
if span:
将得出True
。您想使用get_text
获取包含的文本,并检查其是否为非空。
尝试一下:
cities = []
for span in div.findAll('span', {'itemprop': 'addressLocality'}):
text = span.get_text()
if len(span) > 0:
cities.append(text)
print(cities)
答案 1 :(得分:0)
尝试使用find_all
,如果没有文字,请用“ N / A”填充
spans = div.find_all('span', {'itemprop':'addressLocality'})
cities = [span.get_text() if span.get_text() else "N/A" for span in spans]
print cities
如果您想坚持使用原始代码结构,则非常接近,但是请尝试以下方法:
for span in div.find_all('span', {'itemprop':'addressLocality'}):
if span.get_text():
print(span.get_text())
else:
print('NA')