Utilisez Python: XPath pour extraire des films oeil de chat

Préface

Le texte et les images de cet article proviennent d'Internet et sont uniquement à des fins d'apprentissage et de communication. Ils n'ont aucun usage commercial. Si vous avez des questions, veuillez nous contacter pour traitement.

PS: Si vous avez besoin de matériel d'apprentissage Python, vous pouvez cliquer sur le lien ci-dessous pour l'obtenir vous-même

Matériel d'apprentissage gratuit Python et réponses à la communication de groupe Cliquez pour rejoindre


Utilisez XPath pour extraire les 100 meilleurs films Maoyan.https://maoyan.com/board/4

Extraction de données XPath

Introduction XML

XML s'appelle Extensible Markup Language. XML est un outil important pour la transmission de données sur Internet. Il peut couvrir n'importe quelle plate-forme sur Internet sans être limité par les langages de programmation et les systèmes d'exploitation. On peut dire qu'il s'agit d'un support de données avec le plus niveau d'accès Internet. Très similaire au HTML.

La différence entre HTML et XML est que HTML est principalement utilisé pour afficher des données et XML est utilisé pour transmettre des données.

XML est fermé par des balises. Par exemple:… apparaît par paires.

<?xml version="1.0" encoding="utf-8"?>

<bookstore>

  <book category="奇幻">
    <title lang="ch">冰与火之歌</title>
    <author>乔治 马丁</author>
    <year>2005</year>
    <price>365.00</price>
  </book>

  <book category="童话">
    <title lang="ch">哈利波特与死亡圣器</title>
    <author>J K. 罗琳</author>
    <year>2005</year>
    <price>48.98</price>
  </book>

  <book category="编程">
    <title lang="ch">Python编程-从入门到放弃</title>
    <author>挖掘机小王子</author>
    <year>2048</year>
    <price>99.00</price>
  </book>

  <book category="web" cover="paperback">
    <title lang="en">Python编程-从看懂到看开</title>
    <author>尼古拉斯-赵四</author>
    <year>2003</year>
    <price>39.95</price>
  </book>

</bookstore>

Dans la xmlgrammaire ci-dessus , il existe une relation entre père et fils, ancêtre, etc.

Présentation de XPath

XPath (XML Path Language) est un langage permettant de rechercher des informations dans des documents XML. Il peut être utilisé pour parcourir des éléments et des attributs dans des documents XML / HTML et extraire les éléments correspondants.

C'est aussi une méthode d'extraction de données, mais uniquement pour les données HTML / XML, car les robots d'exploration traitent principalement des pages HTML.

Règles de correspondance XPath

Le tableau suivant présente les règles couramment utilisées dans XPath:
Insérez la description de l'image ici
bibliothèque lxml

lxml est un module tiers Python. La fonction principale est de savoir comment analyser et extraire des données HTML / XML.

Semblable au standard, lxml est un analyseur Python HTML / XML haute performance. Nous pouvons utiliser la syntaxe XPath que nous avons apprise auparavant pour localiser rapidement des éléments spécifiques et des informations sur les nœuds.

  • installation:pip install lxml

Si l'installation en ligne échoue, utilisez l'installation hors ligne.

Lorsque parsel est de nouveau installé, lxml sera installé automatiquement, il n'est donc pas nécessaire de le réinstaller.

Utiliser le module lxml

L'initialisation génère un objet d'analyse XPath et peut en même temps compléter automatiquement les balises HTML incomplètes. Code source Web entrant.

from lxml import etree

string = """
  <book category="web" cover="paperback">
    <title lang="en">Python编程-从看懂到看开</title>
    <author>Python编程</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
"""

# 再解析之前必须先转化一下
html = etree.HTML(string)
# 返回结果是列表
result = html.xpath("//book[contains(@cover,'paper')]/title/text()")
result = html.xpath("//book[4]/title/text()")

print(result)

En raison parselde la lxmlréalisation, l'utilisation de la commutation transparente peut être directement renvoyée dans xpath.

Utilisez XPath pour sélectionner le contenu spécifié. Les règles de syntaxe XPath sont écrites entre parenthèses. Retour à la liste.

# -*- coding: utf-8 -*-
import requests
import parsel

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
}

response = requests.get('https://maoyan.com/board/4?offset=0', headers=headers)
html = response.text

# %% 选择任意节点
sel = parsel.Selector(html)
# 提取 p 标签
ps = sel.xpath('//p')
for p in ps:
    print(p.get())

Cas: XPath extrait des films d'oeil de chat

'''
猫眼电影:
https://maoyan.com/board/4?offset=20
    函数式:
        1. 获取(请求)一页的函数
        2. 定义解析函数(解析一页)
        3. 写入文件函数
        4. 循环函数
        5. python学习交流群:1136201545
'''
import json
import requests
from lxml import etree


# 获取响应
def getOnePage(url):
    '''获取一页的响应的函数'''

    response = requests.get(url)

    return response.text


# 解析响应 --> 结果
def parseOnePage(text):

    # 初始化解析
    html = etree.HTML(text)
    # 里面有所有的数据 先选择上一层  这一层里面包含所有数据 然后循环遍历
    data = html.xpath('//dl[@class="board-wrapper"]')
    # 遍历提取所有的元素
    for dat in data:
        print(dat)
        # 继续选取
        # 标题
        title = dat.xpath('.//div//a/text()')
        # 主演
        star = dat.xpath('.//p[@class="star"]/text()')
        # 时间
        releasetime = dat.xpath('//p[@class="releasetime"]/text()')

        for tit, sta, rel in zip(title, star, releasetime):
            # 在函数里面遇到return就终止
            # 生成器
            yield {
                '电影名字': tit,
                '主演': sta.strip(),
                '上映时间': rel
            }


def save2File(data):
    # with open('maoyan66.txt', 'a', encoding='utf-8') as fp:
    #     fp.write(data+'\n')

    with open('maoyan66.txt', 'a', encoding='utf-8') as fp:
        fp.write(json.dumps(data, ensure_ascii=False)+'\n')


if __name__ == "__main__":

    for page in range(10):

        # 一页网址
        url = f'https://maoyan.com/board/4?offset={page*10}'
        # 调用
        r = getOnePage(url)
        # 解析数据 返回生成器
        result = parseOnePage(r)
        for res in result:
            # with open('maoyan.txt','a',encoding='utf-8') as fp:
            #     # 打印到文件
            #     print(str(res), file=fp)
            save2File(str(res))

Je suppose que tu aimes

Origine blog.csdn.net/pythonxuexi123/article/details/112787203
conseillé
Classement