Python Xpath。如何选择两个标记之间的所有文本?
下面是html源代码Python Xpath。如何选择两个标记之间的所有文本?,python,xpath,Python,Xpath,下面是html源代码 <div class="text"><a name="dst100030"></a><pre id="p73" class="P"><span class="blk">│Лабораторные методы исследования │</span></pre><pre id="p74" class="P
<div class="text"><a name="dst100030"></a><pre id="p73" class="P"><span class="blk">│Лабораторные методы исследования │</span></pre><pre id="p74" class="P"><span class="blk">├────────────┬───────────────────────────┬─────────────────┬──────────────┤</span></pre><a name="dst100031"></a>
但它返回空列表。我错在哪里?使用re解决您的问题: 注意:正如其他人在评论中提到的,这可能不是最好的解决方案-最好使用合适的解析器
import re
source_code ='<div class="text"><a name="dst100030"></a><pre id="p73" class="P"><span class="blk">│Лабораторные методы исследования│</span></pre><pre id="p74" class="P"><span class="blk">├────────────┬───────────────────────────┬─────────────────┬──────────────┤</span></pre></a name="dst100031"></a>'
text = re.findall('<a name="dst100030">(.*)</a name="dst100031">', source_code)
print(text)
重新导入
源代码│Лабораторные методы исследования│├────────────┬───────────────────────────┬─────────────────┬──────────────┤'
text=re.findall(“(.*),源代码)
打印(文本)
是
的兄弟,而不是text()。您可以使用previous::a
(对于following
,也可以使用类似的方法)。您是否设置了使用xpath?或者你愿意使用像re这样的模块吗?来完成你的任务。@Chris我愿意接受任何解决方案。永远不要用正则表达式解析XML。使用真正的XML解析器。不,OP说“我对任何解决方案都持开放态度”并不重要。他说他对任何解决方案都持开放态度-这是可行的,即使它可能不是最好的解决方案。@Chris,……但是,StackOverflow是一种教学资源。如果您不愿意维护使用该技术的代码(为使用该技术的客户/客户提供技术支持等),那么教授该技术是不负责任的。这可能在给出非常具体的输入时“起作用”,但它是脆弱的:其他具有完全相同语义但格式不同的HTML将失败。作为一个不得不处理来自客户的支持票证的人,当我们更改换行符/添加其他字段/进行其他设计合理的解析器会忽略的更改时,他们的手动解析器出现故障,这很重要。无数可能出错的例子中的一个:在div
和class
之间的第二个空格格式完美,但会破坏正则表达式的解决方案。不要试图解决这个问题,因为还有很多。请参阅和许多其他参考资料,解释原因。谢谢。如果有一个这样的块列表,我需要从每个块之间获取文本,该怎么办。有这样的解决方案吗?'>'>'>'>'>'>'>'>'>若要提出新问题,请创建新问题。请检查此线程
import re
source_code ='<div class="text"><a name="dst100030"></a><pre id="p73" class="P"><span class="blk">│Лабораторные методы исследования│</span></pre><pre id="p74" class="P"><span class="blk">├────────────┬───────────────────────────┬─────────────────┬──────────────┤</span></pre></a name="dst100031"></a>'
text = re.findall('<a name="dst100030">(.*)</a name="dst100031">', source_code)
print(text)