Le contact étroit entre xpath et lxml

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.
Insérez la description de l'image ici
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'
Insérez la description de l'image ici
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;

  1. / html / head / title / text ()
  2. // div [position () = 1] / a [@href = "// www.elanp.com /"] / text ()
  3. // div [@ class = "mypos"] / a [@href = "// www.elanp.com /"] / text ()
  4. // div [position () <2] / a [contient (@href, “w”)] / @ href
  5. (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:
    Insérez la description de l'image ici

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__.
Insérez la description de l'image ici
Par conséquent:

  1. Créez un interpréteur; parse = etree.HTMLParser (encoding = 'utf-8')
  2. Spécifiez l'interpréteur; html = etree.parse (filename, parse)
  3. opération xpath; html.xpath (instruction)
  4. 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é! ! !

Je suppose que tu aimes

Origine blog.csdn.net/FUTEROX/article/details/107451547
conseillé
Classement