【发布时间】:2020-10-20 00:25:41
【问题描述】:
我正在创建一个网络 scraper,但在获取最有可能生成的页面时遇到问题,如下所示:
<html>
<body>
<div >
<code>
<p class="nt"><my-component</p> <p class="na">v-bind:prop1=</p><p class="s">"parentValue"</p><p class="nt">></my-component></p>
<p class="c"><!-- Or more succinctly, --></p>
<p class="nt"><my-component</p> <p class="na">:prop1=</p><p class="s">"parentValue"</p><p class="nt">></my-component></p>
</code>
</div>
<div>
<code>
<p class="nt"><my-component</p> <p class="na">v-on:myEvent=</p><p class="s">"parentHandler"</p><p class="nt">></my-component></p>
<p class="c"><!-- Or more succinctly, --></p>
<p class="nt"><my-component</p> <p class="err">@</p><p class="na">myEvent=</p><p class="s">"parentHandler"</p><p class="nt">></my-component></p>
</code>
</div>
</body>
</html>
最重要的是code 标签之间的内容。计划是在
标签(或者,删除那些
标记并保持 DOM 的其余部分不变。
所以我需要这样的输出:
<html>
<body>
<div >
<code>
text text and more text
</code>
</div>
</html>
</body>
我的尝试如下..
from bs4 import BeautifulSoup
bs = BeautifulSoup(payload, 'lxml')
with open('/tmp/out.html', 'w+') as f:
for t in bs.find_all():
for q in t.find_all('code'):
# print(t.text, t.next_sibling)
f.write(q.text)
但这并没有给出好的结果..据我所知,bs的主要目的是提取元素,这就是我尝试在另一个文件中重新创建dom的原因。
谢谢!
【问题讨论】:
-
但是您想要一个简单的
code标签,其中包含其余code标签的所有内容,或者,一个一个地提取所有内容?而且,所有的内容都是p拥有的所有文本,是吗? -
@MrNobody33 好吧,所有不是
code的标签都不应该被修改,按原样保存。code标签中的子标签应该被删除,但它们的文本应该被保留。第二个问题,嗯,是的,根据我的经验,代码中的标签很可能是或 标签。
-
for child in bs.find_all('code'): print(child.text, child.next_sibling)这似乎可行,很好,但不知道如何获得它的父母, -
好的,我刚刚发布了一个答案@fugitive!希望它对你有用!
标签: javascript python html web-scraping beautifulsoup