Comment utiliser xpath en python
Qianmen a dit tant de syntaxe xpath, alors comment l'utiliser maintenant. Les mots ici sont inséparables de l'etree dans notre bibliothèque lxml. Il convient de noter ici que comme lxml est écrit en langage C, certaines méthodes de fonction ne sont pas invitées dans pycharm.
Install lxml
pip install lxml
est installé directement via pip. Si vous rencontrez des problèmes, vous pouvez consulter le blog que j'ai écrit sur l'installation de pip.
Lien entre etree et xpath (élément)
En utilisant l'exemple de notre blog précédent; le résumé de la syntaxe de Xpath, nous continuons à utiliser ce site Web de poésie comme exemple.
1 Obtenir le texte de la page Web (html)
from lxml import etree
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/80.0.3987.149 Safari/537.36'}
url='https://www.elanp.com/shige/'
text_=requests.get(url,headers=headers)
text=text_.content.decode('gb2312')
Notez ici que le site Web utilise l'encodage «gb2312».
2. Créez un élément pour utiliser la syntaxe xpath
html_=etree.HTML(text)
这里得到的是element的类可以使用xpath
Ici, nous pouvons utiliser la syntaxe xpath. Par
exemple:
date_1=html_.xpath('''//div[@class="mypos"]/a[@href="//www.elanp.com"/]text()''']
Les résultats sont les suivants; l'
utilisation de etree.HTML () ici n'est pas seulement équivalente à l'utilisation de xpath comme pont, mais plus important encore, elle peut compléter du code HTML incomplet.
Nous pouvons l'imprimer.
htmlcode=etree.tostring(html_,encoding='utf-8').decode('utf-8')
#tostring()方法得到的是bytes数据我们需要将其转化为utf-8,
#同时其默认的编码是Unicode格式,所以要先转化为utf-8的格式之后解码。
Le code le plus complet est:
from lxml import etree
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/80.0.3987.149 Safari/537.36'}
url='https://www.elanp.com/shige/'
text_=requests.get(url,headers=headers)
text=text_.content.decode('gb2312')
html_=etree.HTML(text)
date_1=html_.xpath('''//div[@class="mypos"]/a[@href="//www.elanp.com/"]/text()''']
#htmlcode=etree.tostring(html_,encoding='utf-8').decode('utf-8')
#print(htmlcode)
print(date_1)
Ici, exécutez l'instruction xpath dans le blog précédent;
- / html / head / title / text ()
- // div [position () = 1] / a [@href = "// www.elanp.com /"] / text ()
- // div [@ class = "mypos"] / a [@href = "// www.elanp.com /"] / text ()
- // div [position () <2] / a [contient (@href, “w”)] / @ href
- (En raison de problèmes de saisie, certaines des instructions xpath présentées ici ont des symboles chinois, veuillez vous référer au code comme standard) Les
résultats sont les suivants:
code montrer comme ci-dessous:
from lxml import etree
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/80.0.3987.149 Safari/537.36'}
url='https://www.elanp.com/shige/'
text_=requests.get(url,headers=headers)
text=text_.content.decode('gb2312')
html_=etree.HTML(text)
date_1=html_.xpath('''//div[@class="mypos"]/a[@href="//www.elanp.com/"]/text()''']
#htmlcode=etree.tostring(html_,encoding='utf-8').decode('utf-8')
#print(htmlcode)
#print(date_1)
def get_date(xpath_grammar):
try :
date_1=html_.xpath(xpath_grammar)
print(date_1)
except Exception as e:
print(e)
if __name__=='__main__':
value1='''/html/head/title/text()'''
value2='''//div[position()=1]/a[@href="//www.elanp.com/"]/text()'''
value3='''//div[@class="mypos"]/a[@href="//www.elanp.com/"]/text()'''
value4='''//div[position()<2]/a[contains(@href,"w")]/@href'''
get_date(value1)
get_date(value2)
get_date(value3)
get_date(value4)
Importez du texte html depuis local.
Dans ce cas, il vous suffit d'utiliser etree.parse (nom de fichier),
mais il convient de noter que l'analyse ne complétera pas automatiquement le code html comme HTML, donc parfois il rapportera une erreur lorsqu'il est utilisé directement. Nous devons donc spécifier l'interprète.
Nous pouvons voir son fichier __init__.
Par conséquent:
- Créez un interpréteur; parse = etree.HTMLParser (encoding = 'utf-8')
- Spécifiez l'interpréteur; html = etree.parse (filename, parse)
- opération xpath; html.xpath (instruction)
- code montrer comme ci-dessous;
filename='本地文件名html'
parse=etree.HTMLParser(encoding='utf-8')
html=etree.parse(filename,parse)
#html_text=etree.tostring(html,encoding='utf-8').decode('utf-8')
SOMMAIRE
Le jour heureux est enfin terminé! ! !