Python 美丽的汤错误:'&书信电报;类别';bs4.element.Tag'&燃气轮机';对象没有属性';目录';?
我正在写一个脚本,从文章中提取内容,删除任何不必要的东西,如脚本和样式。美丽的汤不断引发以下例外:Python 美丽的汤错误:'&书信电报;类别';bs4.element.Tag'&燃气轮机';对象没有属性';目录';?,python,django,web-scraping,beautifulsoup,Python,Django,Web Scraping,Beautifulsoup,我正在写一个脚本,从文章中提取内容,删除任何不必要的东西,如脚本和样式。美丽的汤不断引发以下例外: '<class 'bs4.element.Tag'>' object has no attribute 'contents' 查看堆栈跟踪,问题似乎来自for语句后面的这个方法: # Remove divs that have more non-p elements than p elements for div in element.find_all('div'):
'<class 'bs4.element.Tag'>' object has no attribute 'contents'
查看堆栈跟踪,问题似乎来自for语句后面的这个方法:
# Remove divs that have more non-p elements than p elements
for div in element.find_all('div'):
p = len(div.find_all('p')) # <-- div.find_all('p')
我认为问题在于,在
删除所有元素
或代码中的其他地方,您正在删除某些标记的内容
属性
当您调用以\u remove.decompose()
时,似乎发生了这种情况。以下是该方法的来源:
def decompose(self):
"""Recursively destroys the contents of this tree."""
self.extract()
i = self
while i is not None:
next = i.next_element
i.__dict__.clear()
i = next
如果手动调用此函数,会发生以下情况:
>> soup = BeautifulSoup('<div><p>hi</p></div>')
>>> d0 = soup.find_all('div')[0]
>>> d0
<div><p>hi</p></div>
>>> d0.decompose()
>>> d0
Traceback (most recent call last):
...
Traceback (most recent call last):
AttributeError: '<class 'bs4.element.Tag'>' object has no attribute 'contents'
>soup=BeautifulSoup(“hi”)
>>>d0=汤。查找所有('div')[0]
>>>d0
嗨
>>>d0.分解()
>>>d0
回溯(最近一次呼叫最后一次):
...
回溯(最近一次呼叫最后一次):
AttributeError:“”对象没有属性“contents”
似乎一旦对标记调用了decompose
,就不能再尝试使用该标记。但我不太确定这是在哪里发生的
我想检查的一件事是,在
trim()
函数中,len(element.\uu dict\uuuuuuuuuuu)>0
。我认为问题在于,在删除所有元素
或代码中的其他地方,您正在删除某些标记的内容
属性
当您调用以\u remove.decompose()
时,似乎发生了这种情况。以下是该方法的来源:
def decompose(self):
"""Recursively destroys the contents of this tree."""
self.extract()
i = self
while i is not None:
next = i.next_element
i.__dict__.clear()
i = next
如果手动调用此函数,会发生以下情况:
>> soup = BeautifulSoup('<div><p>hi</p></div>')
>>> d0 = soup.find_all('div')[0]
>>> d0
<div><p>hi</p></div>
>>> d0.decompose()
>>> d0
Traceback (most recent call last):
...
Traceback (most recent call last):
AttributeError: '<class 'bs4.element.Tag'>' object has no attribute 'contents'
>soup=BeautifulSoup(“hi”)
>>>d0=汤。查找所有('div')[0]
>>>d0
嗨
>>>d0.分解()
>>>d0
回溯(最近一次呼叫最后一次):
...
回溯(最近一次呼叫最后一次):
AttributeError:“”对象没有属性“contents”
似乎一旦对标记调用了decompose
,就不能再尝试使用该标记。但我不太确定这是在哪里发生的
我要尝试检查的一件事是,在
trim()
函数中,len(element.\uu dict\uuu)>0
。这很奇怪。如果你发布了一个完整的回溯,这会很有帮助。你可能希望对for循环中的所有remove\u all\u元素
调用求和。它不会解决当前的问题,但会提高代码的可读性。@iTayb谢谢提示:)这很奇怪。如果你发布了一个完整的回溯,这会很有帮助。你可能希望对for循环中的所有remove\u all\u元素
调用求和。它不会解决当前的问题,但会增强代码的可读性。@iTayb谢谢提示:)我不确定,我唯一使用del语句的地方是del to_inspect[不需要的属性名称]。我注释掉了所有的remove_all_*函数,但它仍然不起作用。然后我取消了对所有内容的注释,并将p=len(div.find_all('p'))替换为p=99,令人惊讶的是,它停止了引发异常!:O我发现有点奇怪……我用div.extract()替换了div.decompose(),效果很好:)可能是因为div在for语句中被定义为元素的当前元素的别名。find_all('div'),而'decomposition'div会导致这些问题吗?用comment.decompose()替换comment.extract()也会出现错误,尽管是另一个('Comment'对象没有属性'decompose')。可能就是这样。我还能够通过使用嵌套表单的html重现您的错误:“嗨”
我不确定,我使用del语句的唯一地方是del to_inspect[不需要的属性名称]。我注释掉了所有的remove_all_*函数,但它仍然不起作用。然后我取消了对所有内容的注释,并将p=len(div.find_all('p'))替换为p=99,令人惊讶的是,它停止了引发异常!:O我发现有点奇怪……我用div.extract()替换了div.decompose(),效果很好:)可能是因为div在for语句中被定义为元素的当前元素的别名。find_all('div'),而'decomposition'div会导致这些问题吗?用comment.decompose()替换comment.extract()也会出现错误,尽管是另一个('Comment'对象没有属性'decompose')。可能就是这样。我还可以通过使用嵌套表单的html重现您的错误:“hi”
>> soup = BeautifulSoup('<div><p>hi</p></div>')
>>> d0 = soup.find_all('div')[0]
>>> d0
<div><p>hi</p></div>
>>> d0.decompose()
>>> d0
Traceback (most recent call last):
...
Traceback (most recent call last):
AttributeError: '<class 'bs4.element.Tag'>' object has no attribute 'contents'