我在python
和BeatifulSoup
的帮助下从一个网站收到了一篇文章文章。现在我有一个奇怪的问题......我只是在多个p
标签内打印出文本,这些标签位于带有dr_article
类的div中。现在代码看起来像这样:
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
我的问题是如何一次从所有元素中获取文本?要修改什么,所以我不会从一个元素中获取文本,而是从所有元素中获取文本?
答案 0 :(得分:1)
您正在获取所有元素,因此该函数返回列表。尝试通过它:
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