您的位置是:网站首页>Python编程Python编程

带你了解xpath:网页解析神器

少儿编程网2020-11-13 13:32:11Python编程 人已围观 来源:少儿编程 -用户投稿

简介使用XPath提取猫眼电影排行榜前100名。https://maoyan.com/board/4XPath数据提取XML介绍XML称为可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。非常类

版权所有:http://wWw.pxcodeS.com

myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

使用XPath提取猫眼电影排行榜前100名。https://maoyan.com/board/4myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XPath数据提取

XML介绍myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XML称为可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网**高级别通行证的数据携带者。非常类似HTML。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

HTML 和 XML的区别在于HTML主要用来显示数据,XML是用来传输数据。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XML都是标签闭合的。例如: …  成对出现。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

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

<bookstore>

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

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

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

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

</bookstore>

在上面的xml语法中存在父子,先辈等关系。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XPath介绍myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML/HTML 文档中对元素和属性进行遍历,并提取相应元素。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

也是一种数据提取方式,只不过针对的是HTML/XML数据,因为爬虫主要和HTML页面打交道。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

XPath匹配规则myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

下表是XPath常用的规则:
myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

lxml库myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

lxml 是一个Python第三方模块。主要的功能是如何解析和提取 HTML/XML 数据。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

lxml和正则类似,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

  • 安装:pip install lxml

失败的话指定下载源用 pip install lxml -i https://pypi.douban.com/simple  豆瓣源
myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

再安装 parsel 时会自动安装 lxml,这里就不需要再次安装了。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

使用lxml模块myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

初始化生成一个XPath解析对象,同时可以自动补全残缺的HTML标签。传入网页源码。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

from lxml import etree

string = """
  <book category="web" cover="paperback">
    <title>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)

因为 parsellxml 进行了, 所以可以直接再 parsel 中无缝切换使用 xpath 。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

使用XPath选取指定内容。括号里面书写XPath语法规则。 返回列表。myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

# -*- 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())

案例:XPath提取猫眼电影

'''
猫眼电影:
https://maoyan.com/board/4?offset=20
    函数式:
        1. 获取(请求)一页的函数
        2. 定义解析函数(解析一页)
        3. 写入文件函数
        4. 循环函数
        5. python学习交流群:695185429
'''
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+'
')

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


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)) 

更多python相关文章,请关注python自学网。

来源:php中文网myM少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

版权所有:http://wWw.pxcodeS.com


相关文章:

支持一下 ( )

带你了解xpath:网页解析神器

      匿名评论
    • 评论
    人参与,条评论
    带你了解xpath:网页解析神器

微信公众号

免费视频教程

先知道