Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在replaceWith()之后查找()不';t工作(使用BeautifulSoup) 请考虑下面的Python会话: >>> from BeautifulSoup import BeautifulSoup >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith(BeautifulSoup("was")) >>> s.find("i") >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith("was") >>> s.find("i") <i>test</i> >>从BeautifulSoup导入BeautifulSoup >>>s=BeautifulSoup(“_Python_Find_Beautifulsoup - Fatal编程技术网 >从BeautifulSoup导入BeautifulSoup >>>s=BeautifulSoup(“,python,find,beautifulsoup,Python,Find,Beautifulsoup" /> >从BeautifulSoup导入BeautifulSoup >>>s=BeautifulSoup(“,python,find,beautifulsoup,Python,Find,Beautifulsoup" />

在replaceWith()之后查找()不';t工作(使用BeautifulSoup) 请考虑下面的Python会话: >>> from BeautifulSoup import BeautifulSoup >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith(BeautifulSoup("was")) >>> s.find("i") >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith("was") >>> s.find("i") <i>test</i> >>从BeautifulSoup导入BeautifulSoup >>>s=BeautifulSoup(“

在replaceWith()之后查找()不';t工作(使用BeautifulSoup) 请考虑下面的Python会话: >>> from BeautifulSoup import BeautifulSoup >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith(BeautifulSoup("was")) >>> s.find("i") >>> s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>"); myi = s.find("i") >>> myi.replaceWith("was") >>> s.find("i") <i>test</i> >>从BeautifulSoup导入BeautifulSoup >>>s=BeautifulSoup(“,python,find,beautifulsoup,Python,Find,Beautifulsoup,这是一个测试。”);myi=s.find(“i”) >>>myi.替换为(BeautifulSoup(“was”)) >>>s.find(“我”) >>>s=BeautifulSoup(“这是一个测试。”);myi=s.find(“i”) >>>myi.替换为(“was”) >>>s.find(“我”) 测试 请注意第4行后面缺少的s.find(“i”)输出 这是什么原因?有解决办法吗 编辑:实际上,该示例没有演示用例,即: myi.replaceWith(BeautifulSoup("wa&

这是一个测试。

”);myi=s.find(“i”) >>>myi.替换为(BeautifulSoup(“was”)) >>>s.find(“我”) >>>s=BeautifulSoup(“这是一个测试。

”);myi=s.find(“i”) >>>myi.替换为(“was”) >>>s.find(“我”) 测试 请注意第4行后面缺少的s.find(“i”)输出

这是什么原因?有解决办法吗

编辑:实际上,该示例没有演示用例,即:

myi.replaceWith(BeautifulSoup("wa<b>s</b>"))
myi.replacetwith(BeautifulSoup(“was”))
每当插入的部分本身包含非平凡的html代码时,我不知道如何用其他语法替换此语法。只是有

myi.replaceWith("wa<b>s</b>")
myi.replaceWith(“was”)

将用实体替换html特殊字符。

问题似乎是
美化组
对象被视为一个完整的文档
find
遍历文档,询问每个元素后面的下一个元素。但是当它到达您的
美化组(“was”)
时,该对象认为它是整个文档,所以它说后面没有任何内容。这会过早中止搜索


我不认为BeautifulSoup设计为在其他BeautifulSoup对象中包含BeautifulSoup对象。解决办法是不要那样做。为什么您觉得需要使用第一种形式,而不是第二种已经有效的形式?如果您想用一些HTML替换元素,请使用
标记来替换,而不是
BeautifulSoup
对象。

我想,我找到了一个解决方法,它为我解决了这个问题。我以Python脚本的形式再次重复整个代码,以给出一个完整的示例:

from BeautifulSoup import BeautifulSoup
s = BeautifulSoup("<p>This <i>is</i> a <i>test</i>.</p>")
myi = s.find("i")
s2 = BeautifulSoup("wa<b>s</b>")
myi_id = myi.parent.contents.index(myi)
for c in reversed(s2.contents):
    myi.parent.insert(myi_id + 1, c)
myi.extract()

有人能解释一下,为什么跳过
list()
会忽略
s
?(请在评论中回答,因为这不是这里的主要问题。)

更简单的回答:调用
replacetwith
后,通过调用
s=BeautifulSoup(s.renderContents())
重新生成并清理
s
。然后你可以再次找到

我承认我的例子没有说明为什么我需要这个奇怪的结构,我在上面添加了进一步的解释。但是,你的解释是完全正确的,谢谢!不过,如果有一个变通办法,那就太好了。(所以不要生我的气,因为我没有把你的答案标记为解决方案。)@thomas:有一个关于类似问题的错误报告。一条评论说它已经解决了,但我仍然觉得它坏了,我无法理解那里的解释。您可能想对该错误进行评论,并展示您的示例,看看他们说了什么。为什么您需要用
sometag.renderContents()
替换,而不仅仅是用
sometag
替换?好的,让我们通过添加一个不同的示例来更具体一些。。。(见上文,我再次编辑)之所以需要
列表
,是因为它所说的:一个元素只能出现在文档中的一个位置。执行
insert
时,它会从
s2.contents
中删除第一个元素,以便将其插入其他位置。因此,您在迭代s2时正在修改它。请注意,
renderContents
现在称为
encode\u contents
for c in list(s2.contents):
    myi.parent.insert(myi_id + 1, c)