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

如何将bs4.element.ResultSet转换为字符串?python,python,beautifulsoup,runtime-error,Python,Beautifulsoup,Runtime Error,我有一个简单的代码,如: p = soup.find_all("p") paragraphs = [] for x in p: paragraphs.append(str(x)) 我正在尝试转换从xml获得的列表,并将其转换为字符串。我想保留它的原始标签,这样我就可以重复使用一些文本,这就是我为什么要这样附加它的原因。但该列表包含6000多个观察值,因此由于str,会出现递归错误: “RuntimeError:调用Python对象时超出了最大递归深度”

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

    p = soup.find_all("p")
    paragraphs = []

    for x in p:
        paragraphs.append(str(x))
我正在尝试转换从xml获得的列表,并将其转换为字符串。我想保留它的原始标签,这样我就可以重复使用一些文本,这就是我为什么要这样附加它的原因。但该列表包含6000多个观察值,因此由于str,会出现递归错误:

“RuntimeError:调用Python对象时超出了最大递归深度”


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

这里的问题可能是底部的一些二进制图形数据包含字符序列
我相信问题在于
对象
p
没有构建,因此在您完成构建
p=soup之前就已经到达了
。请注意,在构建
soup.prettify()
时,类似地会抛出
递归错误

对于我的解决方案,我使用
re
模块收集所有
..

标记(请参见下面的代码)。我的最终结果是
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))
重新导入
导入URL库
从urllib.request导入请求,urlopen
url='1〕https://www.sec.gov/Archives/edgar/data/1547063/000119312513465948/0001193125-13-465948.txt'
response=urllib.request.urlopen(url.read())

p=re.findall('是否可以将示例xml文件发布到pastebin或其他内容(如有必要,删除敏感数据)?我很难理解为什么在
元素上调用
str
会导致递归深度错误,除非您的标记嵌套深度接近500。我使用的是公共数据。可以在这里找到该文件。正如我在描述中提到的,在pW中有6000多个段落标记导致问题的是bin文档底部的三元图形块,其中一些包含序列
@senshin:no,beautifulsou工作正常。问题在于将每个标记转换为字符串,从而给我一个RuntimeErrorKay,如果您认为这是问题所在,请尝试以下操作:在for循环中添加一个计数器,并在每次迭代中增加计数r乘以1并打印出计数器的值。告诉我发生
运行时错误时计数器的值是多少。我还将此代码用于其他文档,因此我不认为扔掉最后一个文档是最好的选择,但您正引导我走上正确的道路。您需要采取一种基本上包括lo的策略查看每个
,并删除那些
图形的
。这样做并不优雅,因为数据文件的标签格式非常错误,但它应该可以工作。您还可以尝试检查
开始644
,它仅出现在
图形
文档中。作为最后的手段,尝试将数据文件中的
..
重命名为
..
,然后仅在
汤上迭代。查找所有('htmltwo')
而不是整个汤。@samuraiexe如果数据文件的非
图形部分的文本包含一些与筛选时使用的字符串相同的字符串,那么所有这些都可能失败,但我认为这是您必须面对的问题。使用对象
\u str\uuuuuuuuuuo()不是更好吗
method?So
x.\uuu str\uuuu()
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))