Dieser Artikel vermittelt Ihnen relevantes Wissen über Python, das hauptsächlich Probleme im Zusammenhang mit xpath, dem vollständigen Namen von XML Path Language, vorstellt. Es ist eine Sprache zum Auffinden von Informationen in XML-Dokumenten alle.
Empfohlenes Lernen: Python-Tutorial
XPath, der vollständige Name von XML Path Language, ist eine Sprache zum Suchen von Informationen in XML-Dokumenten. Sie wurde ursprünglich zum Durchsuchen von XML-Dokumenten verwendet Es eignet sich auch zum Durchsuchen von HTML-Dokumenten. Es bietet einen sehr präzisen Pfadauswahlausdruck. Darüber hinaus bietet es mehr als 100 integrierte Funktionen für Zeichenfolgen, Werte und Zeit Bei der Verarbeitung von Knoten und Sequenzen usw. können fast alle Knoten, die wir lokalisieren möchten, mit ausgewählt werden. Die Quelldaten der analysierten Seite werden in dieses Objekt geladen.
Umgebungsinstallation
pip install lxml
So instanziieren Sie ein Etree-Objekt
etree. parse(filePath)#你的文件路径
etree.HtML('page_ text')#page_ text互联网中响应的数据
xpath expression
ExpressionDescription geladen werdenKnotenname | Alle untergeordneten Knoten dieses Knotens auswählen |
---|---|
bedeutet, vom Wurzelknoten aus zu beginnen. Es stellt eine Ebene dar. | |
steht für mehrere Ebenen. Dies kann bedeuten, dass die Positionierung von jeder beliebigen Position aus gestartet werden soll. | |
@* | |
[@attrib] | |
[@attrib='value' ] | |
[Tag] | |
对上面表达式的实例详解这是一个HTML的文档 <meta> <title>测试bs4</title> <p> </p><p>百里守约</p> <p> </p><p>李清照</p> <p>王安石</p> <p>苏轼</p> <p>柳宗元</p> <a> <span>this is span</span> 宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a> <a>总为浮云能蔽日,长安不见使人愁</a> <img alt="Python-Beispiel, detaillierte XPath-Analyse" > <p> </p> Nach dem Login kopieren
从浏览器中打开是这样的 子节点和子孙节点的定位 / 和 //先来看子节点和子孙节点,我们从上往下找p这个节点,可以看到p的父节点是body,body父节点是html import requestsfrom lxml import etree tree = etree.parse('test.html')r1=tree.xpath('/html/body/p') #直接从上往下挨着找节点r2=tree.xpath('/html//p')#跳跃了一个节点来找到这个p节点的对象r3=tree.xpath('//p')##跳跃上面所有节点来寻找p节点的对象r1,r2,r3>>([<element>, <element>, <element>], [<element>, <element>, <element>], [<element>, <element>, <element>])</element></element></element></element></element></element></element></element></element> Nach dem Login kopieren 属性定位如果我只想要p里面song这一个标签,就可以对其属性定位 r4=tree.xpath('//p[@class="song"]')r4>>>[<element>]</element> Nach dem Login kopieren 索引定位如果我只想获得song里面的苏轼的这个标签 tree.xpath('//p[@class="song"]/p')>>[<element>, <element>, <element>, <element>]</element></element></element></element> Nach dem Login kopieren 这个单独返回的苏轼的p标签,要注意的是这里的索引不是从0开始的,而是1 tree.xpath('//p[@class="song"]/p[3]')[<element>]</element> Nach dem Login kopieren 取文本比如我想取杜牧这个文本内容 tree.xpath('//p[@class="tang"]//li[5]/a/text()')>>['杜牧'] Nach dem Login kopieren 可以看到这个返回的是一个列表,如果我们想取里面的字符串,可以这样 tree.xpath('//p[@class="tang"]//li[5]/a/text()')[0]杜牧 Nach dem Login kopieren 看一个更直接的,//li 直接定位到 li这个标签,//text()直接将这个标签下的文本提取出来。但要注意,这样会把所有的li标签下面的文本提取出来,有时候你并不想要的文本也会提取出来,所以最好还是写详细一点,如具体到哪个p里的li。 tree.xpath('//li//text()')['清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村', '秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山', '岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君', '杜甫', '杜牧', '杜小月', '度蜜月', '凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘'] Nach dem Login kopieren 取属性比如我想取下面这个属性 tree.xpath('//p[@class="song"]/img/@src')['http://www.baidu.com/meinv.jpg'] Nach dem Login kopieren 或者如果我想取所有的href这个属性,可以看到tang和song的所有href属性 tree.xpath('//@href')['http://www.song.com/', '', 'http://www.baidu.com', 'http://www.163.com', 'http://www.126.com', 'http://www.sina.com', 'http://www.dudu.com', 'http://www.haha.com'] Nach dem Login kopieren 爬虫实战之58同城房源信息#导入必要的库import requestsfrom lxml import etree#URL就是网址,headers看图一url='https://sh.58.com/ershoufang/'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.7 Safari/537.36'}#对网站发起请求page_test=requests.get(url=url,headers=headers).text# 这里是将从互联网上获取的源码数据加载到该对象中tree=etree.HTML(page_test)#先看图二的解释,这里li有多个,所里返回的li_list是一个列表li_list=tree.xpath('//ul[@class="house-list-wrap"]/li')#这里我们打开一个58.txt文件来保存我们的信息fp=open('58.txt','w',encoding='utf-8')#li遍历li_listfor li in li_list: #这里 ./是对前面li的继承,相当于li/p... title=li.xpath('./p[2]/h2/a/text()')[0] print(title+'\n') #把文件写入文件 fp.write(title+'\n')fp.close() Nach dem Login kopieren 图一: 推荐学习:python教程 |
Das obige ist der detaillierte Inhalt vonPython-Beispiel, detaillierte XPath-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!