5

pythonとの助けを借りて、ある Web サイトからテキスト記事を取得していますBeatifulSoupp今、私は奇妙な問題を抱えています... class で div にある複数のタグ内のテキストを印刷したいだけdr_articleです。コードは次のようになります。

from bs4 import BeautifulSoup

def getArticleText(webtext):
soup = BeautifulSoup(webtext)
divTag = soup.find_all("div", {"class":"dr_article"})
for tag in divTag:
    pData = tag.find_all("p").text
    print pData

次のエラーが表示されます。

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
execfile("word_rank/main.py")
  File "word_rank/main.py", line 7, in <module>
articletext.getArticleText(webtext)
  File "word_rank\articletext.py", line 7, in getArticleText
pData = tag.find_all("p").text
AttributeError: 'list' object has no attribute 'text'

しかし、[0].textに最初の要素だけを選択すると、エラーが発生せず、想定どおりに機能します。最初の要素テキストを取得します。正確に言うと、コードを変更すると、次のようになります。

from bs4 import BeautifulSoup

def getArticleText(webtext):
soup = BeautifulSoup(webtext)
divTag = soup.find_all("div", {"class":"dr_article"})
for tag in divTag:
    pData = tag.find_all("p")[0].text
    print pData

私の質問は、一度にすべての要素からテキストを取得するにはどうすればよいですか? 1 つの要素だけからテキストを取得するのではなく、すべての要素からテキストを取得するには、何を変更すればよいですか?

4

1 に答える 1

6

すべての要素を取得しているため、関数はリストを返します。それを試してみてください:

from bs4 import BeautifulSoup

def getArticleText(webtext):
    soup = BeautifulSoup(webtext)
    divTag = soup.find_all("div", {"class":"dr_article"})
    for tag in divTag:
        for element in tag.find_all("p"):
            pData = element.text
            print pData

または、各要素を個別に選択できます。

tag.find_all("p")[0].text
tag.find_all("p")[1].text
tag.find_all("p")[..].text
tag.find_all("p")[N - 1].text
tag.find_all("p")[N].text
于 2013-08-01T09:22:51.867 に答える