不清楚为什么我的函数没有返回

时间:2015-12-08 06:59:54

标签: python beautifulsoup bs4

除了一些Ruby之外,我的编码背景非常有限,所以如果有更好的方法,请告诉我!

基本上我有一个充满单词的.txt文件。我想导入.txt文件并将其转换为列表。然后,我想获取列表中的第一项,将其分配给变量,并在发送的外部请求中使用该变量来获取单词的定义。返回定义,并将其隐藏到另一个.txt文件中。一旦完成,我希望代码抓住列表中的下一个项目并再次完成所有操作,直到列表用完为止。

以下是我正在进行的代码,以便了解我所处的位置。我还在试图弄清楚如何正确地遍历列表,并且我很难解释文档。

如果已经提出要求,请提前抱歉!我搜索过,但找不到任何具体回答我问题的内容。

from __future__ import print_function
import requests
import urllib
from bs4 import BeautifulSoup

def get_definition(x):

    url = 'http://services.aonaware.com/DictService/Default.aspx?action=define&dict=wn&query={0}'.format(x)
    html = urllib.urlopen(url).read()
    soup = BeautifulSoup(html, "lxml")
    return soup.find('pre', text=True)[0]

lines = []
with open('vocab.txt') as f:
    lines = f.readlines()
lines = [line.strip() for line in lines]

definitions = []
for line in lines:
    definitions.append(get_definition(line))

out_str = '\n'.join(definitions)
with open('definitions.txt', 'w') as f:
    f.write(out_str)

我遇到的问题是

Traceback (most recent call last):
  File "WIP.py", line 20, in <module>
    definitions.append(get_definition(line))
  File "WIP.py", line 11, in get_definition
    return soup.find('pre', text=True)[0]
  File "/Library/Python/2.7/site-packages/bs4/element.py", line 958, in __getitem__
    return self.attrs[key]
KeyError: 0

我了解soup.find('pre', text=True)正在返回None,但不知道为什么或如何解决它。

1 个答案:

答案 0 :(得分:2)

你的问题是let date:String let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ" if let value = row["date"]?.asString() { date = value let formattedDate = dateFormatter.dateFromString(date) // formattedDate is nil } 返回单个结果而不是列表。结果是一个类似dict的对象,所以它试图找到它不能的键find()

只需删除0即可。

[0]也未归还soup.find(...)。它正在回答答案!如果它返回None,您将收到错误

None

Beautiful soup documentation for find()