Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Python Xpath。如何选择两个标记之间的所有文本?_Python_Xpath - Fatal编程技术网

Python Xpath。如何选择两个标记之间的所有文本?

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

下面是html源代码

<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)