情况比题目问的复杂一些。我抓了个响应体,然后用etree的方式解析:
r=etree.HTML(requests.post(link,{"filter_by_status":pattern},headers).text)
这样我就可以使用xpath了。但后来遇到一个问题:lxml有一个getparent的方法,可是getchildren的方法却被废弃了,我无法获得某个节点的子元素。
我不是要//a[@id='3']/following-sibling::a[1] 这样使用路径获得节点的方法,我要的是getchildren()这种使用函数返回节点的方法。
我查了一下
python的文档( http://omz-software.com/pythonista/docs/library/xml.etree.elementtree.html ) ,它对getchildren的描述如下:getchildren():
Deprecated since version 3.2: Use list(elem) or iteration.
我不太清楚list(elem)是啥;至于后面那个iteration就更不清楚,再接着查,不知道哪里查到了个ET.SubElement()的方法(需要先import xml.etree.ElementTree as ET),这个方法似乎最接近我的需求,然而当我使用这个方法来查询某节点的子节点时候,程序报错了:TypeError: SubElement() argument 1 must be xml.etree.ElementTree.Element, not lxml.etree._Element。 也就是说我使用xpath获得的那个节点是 lxml.etree._Element,但这个方法只有xml.etree.ElementTree.Element才能使用。但网络上关于lxml.etree._Element少之又少。我真的很懵逼,为什么查询一个子节点就那么难呢?是不是我哪里一开始就弄错了?希望能给个例子,谢谢!