如何将 bs4.element.ResultSet 转换为字符串?蟒



我有一个简单的代码,如下所示:

    p = soup.find_all("p")
    paragraphs = []
    for x in p:
        paragraphs.append(str(x))

我正在尝试转换从xml获得的列表并将其转换为字符串。我想保留它的原始标签,以便我可以重用一些文本,因此我像这样附加它的原因。但是该列表包含超过 6000 个观察值,因此由于 str 而发生递归错误:

"运行时错误:调用 Python 对象时超出最大递归深度"

我读到您可以更改最大递归,但这样做并不明智。我的下一个想法是将字符串的转换分成 500 个批次,但我相信必须有更好的方法来做到这一点。有人有什么建议吗?

这里的问题可能是文档底部的一些二进制图形数据包含字符序列 <P ,美丽汤正试图将其修复为实际的 HTML 标记。我还没有设法确定哪个文本导致了"超过递归深度"错误,但它就在那里的某个地方。这对我来说p[6053],但由于您似乎对文件进行了一些修改(或者您可能正在为 Beautiful Soup 使用不同的解析器),我想这对您来说会有所不同。

假设您不需要文档底部的二进制数据来从实际<p>标签中提取所需的任何内容,请尝试以下操作:

# boot out the last `<document>`, which contains the binary data
soup.find_all('document')[-1].extract()
p = soup.find_all('p')
paragraphs = []
for x in p:
    paragraphs.append(str(x))
我认为

问题是BeautifulsSoup对象p不是按迭代方式构建的,因此在完成构造之前达到了方法调用限制p = soup.find_all('p')。请注意,在构建soup.prettify()时,RecursionError类似地抛出。

对于我的解决方案,我使用 re 模块来收集所有<p>...</p>标签(请参阅下面的代码)。我的最终结果是len(p) = 5571.此计数低于您的计数,因为正则表达式条件与二进制图形数据中的任何文本都不匹配。

import re
import urllib
from urllib.request import Request, urlopen
url = 'https://www.sec.gov/Archives/edgar/data/1547063/000119312513465948/0001193125-13-465948.txt'
response = urllib.request.urlopen(url).read()
p = re.findall('<P((.|s)+?)</P>', str(response)) #(pattern, string)
paragraphs = []
for x in p:
    paragraphs.append(str(x))

最新更新