0

私はいくつかの 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ますが、それを修正する理由や方法はわかりません。

4

1 に答える 1

2

あなたの問題はfind()、リストではなく単一の結果を返すことです。結果は dict のようなオブジェクトになるため、見つからないキーを見つけようとします0

を削除するだけ[0]で問題ありません

またsoup.find(...)返品不可Noneです。返事を返しています!返された場合None、エラーが発生します

NoneType has no attribute __getitem__

find() の美しいスープ ドキュメント

于 2015-12-08T07:19:01.810 に答える