scggdani 发表于 2021-1-19 22:05

xpath解析问题

**要解析的xml:**
```
<html>
        <body>
                <tr>
                        <td>a</td>
                        <td>b</td>
                </tr>
                <tr>
                        <td>c</td>
                        <td>d</td>
                </tr>
                <tr>
                        <td>e</td>
                        <td>f</td>
                </tr>
        </body>
</html>
```
要解析`td`标签里的值,使用的python代码如下:

```python
from lxml import etree

path = './1.html'
tree = etree.parse(path)
a = tree.xpath('//td/text()')
# a = tree.xpath('//tr/td/text()')
print(a)
```
为什么这两种写法的返回值都为空列表呢?按理说应该取到值了呀!

Georgeoink 发表于 2021-1-19 22:34

试试看(‘//td/text()’)?

Jack2002 发表于 2021-1-19 22:35

from lxml import etree

path = '.\\1.html'
tree = etree.parse(path, etree.HTMLParser())
print(tree)

a = tree.xpath('//tr/td/text()')
print(a)

b = tree.xpath('//tr/td/text()')
print(b)

fanvalen 发表于 2021-1-19 22:51

本帖最后由 fanvalen 于 2021-1-19 22:57 编辑

所以我不喜欢这种解析,直接re
improt re
txt=open('./1.html',encoding='utf8').read
a=re.findall(r'<td>(.*)</td>',txt)
print(a)

yangbing965 发表于 2021-1-20 01:13

fanvalen 发表于 2021-1-19 22:51
所以我不喜欢这种解析,直接re
improt re
txt=open('./1.html',encoding='utf8').read


re正则,写起来麻烦点。也可能楼主没搞明白正则的编写规则。

对于楼主的要求,其实用Beautiful Soup4的CSS选择器来写更方便。

https://www.cnblogs.com/luckiness/p/13177875.html

加钱哥 发表于 2021-1-20 02:33

xpath 索引是从 1 开始的,不是 0

hxh-linux 发表于 2021-1-20 06:19

xpath解析从1开始不是0

weikun444 发表于 2021-1-20 07:17

可以试试这个办法 :

南归不NG 发表于 2021-1-20 07:45

weikun444 发表于 2021-1-20 07:17
可以试试这个办法 :

和我一样懒

Rezalt 发表于 2021-1-20 08:44

xpath不存在0的说法 第一个下标就是1
页: [1] 2
查看完整版本: xpath解析问题