Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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
Html BS4:使用新标记包装同级的范围_Html_Beautifulsoup - Fatal编程技术网

Html BS4:使用新标记包装同级的范围

Html BS4:使用新标记包装同级的范围,html,beautifulsoup,Html,Beautifulsoup,我在Beautifulsoup4.8.1上 我想增加一个HTML文件以突出显示感兴趣的部分 让我们举个例子。假设我有 前面的一些垃圾 开始触发 同侧阴唇 坐吧,艾米特,康塞图尔·埃利蒂尔 最后更混乱 末端触发器 我已经能够在中间提取一个包含四代码> /COD>标签的列表(即从“开始触发器”直到“杂波”,包括)。 我希望生成以下输出: 前面的一些垃圾 开始触发 同侧阴唇 坐吧,艾米特,康塞图尔·埃利蒂尔 最后更混乱 末端触发器 我怎样才能做到这一点?我认为知道如何创建已知bs4.eleme

我在Beautifulsoup4.8.1上

我想增加一个HTML文件以突出显示感兴趣的部分

让我们举个例子。假设我有

前面的一些垃圾
开始触发
同侧阴唇
坐吧,艾米特,康塞图尔·埃利蒂尔
最后更混乱
末端触发器

我已经能够在中间提取一个包含四代码> /COD>标签的列表(即从“开始触发器”直到“杂波”,包括)。 我希望生成以下输出:

前面的一些垃圾

开始触发
同侧阴唇
坐吧,艾米特,康塞图尔·埃利蒂尔
最后更混乱

末端触发器

我怎样才能做到这一点?我认为知道如何创建已知bs4.element.Tag的新同级可能会有所帮助,如果不能“原子化”地包装整个范围。

基于您的示例,我已经尝试过这一点。希望这能有所帮助。 首先使用正则表达式,元素需要在前面添加标记,然后
find_next_同胞
()进行查找,直到找到为止

最后添加新标签,然后在其中添加所有div标签

import re
from bs4 import BeautifulSoup

html='''<div> some preceding junk </div>
<div> BEGIN TRIGGER </div>
<div> Lorem ipsum dolor </div>
<div> sit amet, consetetur elitir </div>
<div> more clutter at the end </div>
<div> END TRIGGER </div>'''

soup=BeautifulSoup(html,'html.parser')
search=soup.find("div",text=re.compile('BEGIN'))
prev=search.find_previous_siblings('div')[0]

new_tag = soup.new_tag("p")
new_tag.append(str(search) +'\n')
for item in search.find_next_siblings('div'):

    if 'END TRIGGER' in item.text:
       lastement=item
       break;
    else:
        new_tag.append(str(item) + '\n')

finalsoup=str(prev) +'\n' + new_tag.prettify(formatter=None) + '\n' + str(lastement)

print(finalsoup)
重新导入
从bs4导入BeautifulSoup
html=''一些前面的垃圾
开始触发
同侧阴唇
坐吧,艾米特,康塞图尔·埃利蒂尔
最后更混乱
结束触发器“”'
soup=BeautifulSoup(html,'html.parser')
search=soup.find(“div”,text=re.compile(“BEGIN”))
prev=search.find_previous_同胞('div')[0]
新标签=汤。新标签(“p”)
新标签.append(str(搜索)+'\n')
对于搜索中的项目。查找下一个兄弟姐妹('div'):
如果item.text中的“结束触发器”:
最后期限=项目
打破
其他:
新标签.append(str(item)+'\n')
finalsoup=str(prev)+'\n'+新标签。修饰(格式化程序=None)+'\n'+str(lastement)
打印(最终组)
输出

<div> some preceding junk </div>
<p>
 <div> BEGIN TRIGGER </div>
 <div> Lorem ipsum dolor </div>
 <div> sit amet, consetetur elitir </div>
 <div> more clutter at the end </div>
</p>
<div> END TRIGGER </div>
前面的一些垃圾

开始触发
同侧阴唇
坐吧,艾米特,康塞图尔·埃利蒂尔
最后更混乱

末端触发器
在我看来,这更像是一些棘手的字符串操作,而不是实际的HTML树操作。你知道如何实现后者吗?事实上,这是一个棘手的字符串操作。没有通用的方法来实现这种用例。