【发布时间】:2015-05-12 12:35:28
【问题描述】:
我已经编写了一段代码,它可以很好地打印,但是当我创建它的函数并尝试返回它时失败了。这是原始代码:
import requests
from bs4 import BeautifulSoup
import wikipedia
source_code = requests.get('http://en.wikipedia.org/wiki/IBM')
plain_text = source_code.text
plain_text = plain_text[:plain_text.find('id="toc"')]
soup = BeautifulSoup(plain_text)
for div in soup.findAll('a'):
if div.parent.name == 'p':
href = div.get('href')
href = href.replace(',', '')
href = href.replace('-', ' ')
href = href.replace('(', '')
href = href.replace(')', '')
href = href.replace('_', ' ')
print (href[6:])
href = href.replace(' ', '_')
href = href.replace(' ^ ', '')
try:
print(wikipedia.summary(href[6:]))
except wikipedia.exceptions.DisambiguationError as e:
print (e.options)
它格式化文本并给我一个维基百科页面的标题和摘要以及原始摘要中链接的所有摘要,这正是我想要的。不幸的是,这需要成为更大程序的一部分,因此我制作了一个函数(也许我应该以另一种方式来做?) 它看起来像这样:
import requests
from bs4 import BeautifulSoup
import wikipedia
source_code = requests.get('http://en.wikipedia.org/wiki/IBM')
plain_text = source_code.text
plain_text = plain_text[:plain_text.find('id="toc"')]
soup = BeautifulSoup(plain_text)
def ELS():
for div in soup.findAll('a'):
if div.parent.name == 'p':
href = div.get('href')
href = href.replace(',', '')
href = href.replace('-', ' ')
href = href.replace('(', '')
href = href.replace(')', '')
href = href.replace('_', ' ')
return href[6:]
href = href.replace(' ', '_')
href = href.replace(' ^ ', '')
try:
return wikipedia.summary(href[6:])
except wikipedia.exceptions.DisambiguationError as e:
return e.options
print (ELS())
但由于某种原因,它不会循环,只是打印第一个标题然后中断,也许这是一个简单的问题,只是我错过了一些东西
【问题讨论】:
-
当你使用
return时,函数立即返回,所以循环结束。 -
不要在循环内返回,将值连接到结果字符串上。循环完成后返回该字符串。
-
好吧,我想可能是这样的,谢谢:)
-
@SamuelHåkansson 连接速度很慢。您应该收集列表中的所有子字符串并使用
join方法构建最终字符串,或者通过将return替换为'yield' 将您的函数转换为生成器。由于多功能性,后者可以说是更可取的。
标签: python loops return function