Der folgende Editor bringt Ihnen einen Artikel über die XML-Parsing-Bibliothek des Python-Crawlers (umfassendes Verständnis). Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor, um einen Blick darauf zu werfen
1.Xpath
Elemente und Attribute in XML-Dokumenten durchlaufen. Sowohl XQuery als auch xpoint basieren auf dem XPath-Ausdruck
2. Knoten
Elternteil, Kind, Bruder (Geschwister), Vorfahre (Vorfahre), Nachkomme (Abkömmling)
3. Knoten auswählen
Pfadausdruck
表达式 | 描述 | 路径表达式 | 结果 |
nodename | 选取此节点上的所有的子节点 | bookstore | 选取bookstore元素的所有子节点 |
/ | 从根节点上选取 | /bookstore | 选取根元素bookstore,为绝对路径 |
// | 从匹配选择的当前节点选择文档中的节点,不考虑位置 | //book | 选取所有的book子元素,而不管他们在文档的位置 |
. | 选取当前节点 | bookstore//book | 选择bookstore后代中所有的book元素 |
.. | 选取当前节点的父节点 | ||
@ | 选取属性 | //@lang | 选取名为lang的所有属性 |
Prädikat
Das Prädikat wird verwendet, um einen bestimmten Knoten oder einen Knoten zu finden, der einen bestimmten Wert enthält
Das Prädikat ist in eckige Klammern eingebettet
路径表达式 | 结果 |
/bookstore/book[1] | 选取属于bookstore子元素的第一个book元素 |
/bookstore/book[last()] | 选取属于bookstore子元素的最后book元素 |
/bookstore/book[last()-1] | 选取属于bookstore子元素的倒数第二个book元素 |
/bookstore/book[position()<3] | 选取最前面的两个属于bookstore元素的子元素的book元素 |
//title[@lang='eng'] | 选取所有的title元素,并且这些元素拥有值为eng的lang属性 |
/bookstore/book[price>35.0] | 选取bookstore元素的所有book元素,且其中的price值大于35.0 |
Unbekannte Knoten auswählen (Platzhalter)
* Entspricht jedem Elementknoten
@* Entspricht jedem Attributknoten
node() Entspricht jedem Knotentyp
4.lxml-Verwendung
#!/usr/bin/python #_*_coding:utf-8_*_ from lxml import etree text=''' <p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" >fifth item</a> </ul> </p> ''' # html=etree.HTML(text) #html对象,存储在地址中,有自动修正功能 # result=etree.tostring(html) #将html对象转化为字符串 html=etree.parse('hello.html') # result=etree.tostring(html,pretty_print=True) # print result print type(html) result= html.xpath('//li') print result print len(result) print type(result) print type(result[0]) print html.xpath('//li/@class') # 获取li标签下的所有的class print html.xpath('//li/a[@href="link1.html" rel="external nofollow" rel="external nofollow" ]') #获取li标签下href为link1的<a>标签 print html.xpath('//li//span') #获取li标签下所有的span标签 print html.xpath('//li[last()-1]/a')[0].text #获取倒数第二个元素的内容
Das obige ist der detaillierte Inhalt vonUmfassendes Verständnis der XLML-Parsing-Bibliothek des Python-Crawlers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!