Python爬虫

您所在的位置:网站首页 xpath获取html文本包括标签 Python爬虫

Python爬虫

#Python爬虫| 来源: 网络整理| 查看: 265

Python爬虫——XPath解析本地html文件 1、XPath 简介

XPath:XML路径语言(XML Path Language),XPath作用是确定XML文档中某部分的位置,同时它也可以用于检索 HTML 文件。在使用爬虫过程中可以用 XPath 来爬取网页中想要的数据。

Xpath 可以理解为在 XML/HTML 文档中对元素和属性进行遍历的工具。

Xpath 使用简洁的路径表达式来匹配 XML/HTML 文档中的节点或者节点集,通过定位网页中的节点,从而找到我们需要的数据。

Xpath 提供了100 多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此 Xpath 路径表达式几乎可以匹配所有的元素节点。

Xpath 路径表达式跟电脑文件夹目录、网址的url相似,用 / 来表示路径的深度。

XPath插件的下载安装

chrome插件XPATH HelPer 下载地址:

链接:https://pan.baidu.com/s/1cx5Q42aJs1mky1qSZQYObA?pwd=sesp

提取码:sesp

下载XPATH HelPer插件,把下载文件的后缀名改为.zip;

打开谷歌浏览器,进入扩展程序,打开开发者模式,把XPATH HelPer插件拉进扩展程序界面,自动进行安装:

在这里插入图片描述

打开XPATH HelPer插件快捷键:CTRL+SHIFT+X,

打开后浏览器上方会出现使用 XPATH 插件的窗口:

在这里插入图片描述

2、下载 lxml

第三方解析库 lxml是一款高性能的 Python HTML/XML 解析器, 对 Xpath 路径表达式提供了良好的支持,主要的功能是利用XPath语法解析和提取 HTML/XML 数据。

1、lxml安装位置:Python安装目录的Scripts文件夹下

2、安装命令:pip install lxml -i https://pypi.douban.com/simple,如下图则安装成功:

在这里插入图片描述

3、XPath解析本地 html 文件

XPath路径表达式:

表达式描述node_name(节点名)选取此节点的所有子节点/查找当前节点的子节点//查找当前节点的所有子孙节点,不考虑层级关系.选取当前节点…选取当前节点的父节点@选取属性值,通过属性值选取数据。常用元素属性有 @id 、@name、@value、@type、@class、@tittle、@href

编写本地html文件:xpath_local.html

DOCTYPE html> Title 法治的细节 纸质书 30元 罗翔

路径查询:

解析实例:查找 ul 标签下的 li 标签

from lxml import etree #解析本地文件使用 etree.parse tree = etree.parse('xpath_local.html') list1 = tree.xpath('//body/ul/li') #返回标签内容 text() list2 = tree.xpath('//body/ul/li/text()') list3 = tree.xpath('//body//li/text()') print(list1) print(list2) print(list3)

执行结果:

[, , , ] ['法治的细节', '纸质书', '30元', '罗翔'] ['法治的细节', '纸质书', '30元', '罗翔']

谓词查询:

解析实例:查找有id属性的li标签

from lxml import etree tree = etree.parse('xpath_local.html') list1 = tree.xpath('//body/ul/li[@id]/text()') print(list1)

执行结果:

['法治的细节', '纸质书']

属性查询:

解析实例:查找id属性为"name"的li标签

from lxml import etree tree = etree.parse('xpath_local.html') list1 = tree.xpath('//body/ul/li[@id="name"]/text()') print(list1)

执行结果:

['法治的细节']

解析实例:查找id为"name"的 li 标签的class属性的数据

from lxml import etree tree = etree.parse('xpath_local.html') list1 = tree.xpath('//body/ul/li[@id="name"]/@class') print(list1)

执行结果:

['bookName']

模糊查询:

解析实例:查找id属性值包含"a"的 li 标签

from lxml import etree tree = etree.parse('xpath_local.html') list1 = tree.xpath('//ul/li[contains(@id,"a")]/text()') print(list1)

执行结果:

['法治的细节']

解析实例:查找id属性值以"m"为开头的 li 标签

from lxml import etree tree = etree.parse('xpath_local.html') list1 = tree.xpath('//ul/li[starts-with(@id,"m")]/text()') print(list1)

执行结果:

['纸质书']


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3