爬虫之解析库Xpath
简介
语法
表达式
|
描述
|
---|---|
nodename
|
选取此节点的所有子节点。
|
/
|
从根节点选取。
|
//
|
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
|
.
|
选取当前节点。
|
..
|
选取当前节点的父节点。
|
@
|
选取属性。
|
运算符
运算符
|
描述
|
实例
|
返回值
|
---|---|---|---|
|
|
计算两个节点集
|
//book | //cd
|
返回所有拥有 book 和 cd 元素的节点集
|
+
|
加法
|
6 + 4
|
10
|
-
|
减法
|
6 - 4
|
2
|
*
|
乘法
|
6 * 4
|
24
|
div
|
除法
|
8 div 4
|
2
|
=
|
等于
|
price=9.80
|
如果 price 是 9.80,则返回 true。
如果 price 是 9.90,则返回 false。
|
!=
|
不等于
|
price!=9.80
|
如果 price 是 9.90,则返回 true。
如果 price 是 9.80,则返回 false。
|
<
|
小于
|
price<9.80
|
如果 price 是 9.00,则返回 true。
如果 price 是 9.90,则返回 false。
|
<=
|
小于或等于
|
price<=9.80
|
如果 price 是 9.00,则返回 true。
如果 price 是 9.90,则返回 false。
|
>
|
大于
|
price>9.80
|
如果 price 是 9.90,则返回 true。
如果 price 是 9.80,则返回 false。
|
>=
|
大于或等于
|
price>=9.80
|
如果 price 是 9.90,则返回 true。
如果 price 是 9.70,则返回 false。
|
or
|
或
|
price=9.80 or price=9.70
|
如果 price 是 9.80,
或者 price 是 9.70,则返回 true。
|
and
|
与
|
price>9.00 and price<9.90
|
如果 price 大于 9.00,
并且 price 小于9.90,则返回 true。
|
mod
|
计算除法的余数
|
5 mod 2
|
1
|
常用表达式
- 获取所有节点
- 获取所有li标签
- //* //li
- 获取子节点
- 我们通过/或//即可查找元素的子节点和子孙节点
- li节点的所有直接a子节点
- //li/a
- 获取ul的所有子孙a节点
- //ul//a - 获取父节点属性
- 知道子节点查询父节点
- //div[@class="filter-wrap"]/../@class'
- //div[@class="filter-wrap"]/parent::*/@class' - 属性定位
- 找到当前源码中所有class属性为song的div标签
- //div[@class="song"] - 层级&索引定位
- 找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a
- //div[@class="tang"]/ul/li[2]/a - 多属性匹配
- 从当前源码中找到href属性为空且class属性为song的所有a标签
- //a[@href="" and @class="song"] - 模糊匹配
- 找到所有class属性值中包含nb的所有div标签
- //div[contains(@class,"so")]
- 找到所有class属性值以zb开头的所有div标签
- //div[starts-with(@class,"ta")] - 获取文本
- / 表示获取某个标签下的文本内容
- // 表示获取某个标签下的文本内容和所有子标签下的文本内容
- //div[@class="song"]/p[1]/text()
- //div[@class="tang"]//text() - 获取属性
- //div[@class="tang"]//li[2]/a/@href
案例演示
环境安装
pip install lxml
解析原理
- 解析原理:
- 获取页面源码数据
- 实例化一个etree对象,并将页面源码数据加载到该对象中
- 调用该对象的xpath方法进行指定标签的定位
- 注意:xpath函数必须结合着xpath表达式进行标签的定位和内容的捕获
58同城房源信息抓取
import requests
from lxml import etree url = "https://bj.58.com/shahe/ershoufang/?PGTID=0d30000c-0047-e4b2-f57c-08960a90aab4&ClickID=1"
headres = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
response = requests.get(url).text # 实列化一个etree对象,加载页面源码数据
tree = etree.HTML(response) # etree对象调用xpath函数,结合xpath表达式进行标签定位和内容捕获
li_list = tree.xpath('//ul[@class="house-list-wrap"]/li') # 返回值由很多个li标签组成的列表
for i in li_list:
tetle = i.xpath("./div[2]/h2/a/text()")[0] # 局部调用表达式时必须加点
procr = "".join(i.xpath("./div[3]/p//text()")) # 将价格拼接
print(tetle,procr) """
i.xpath("./div[2]/h2/a/text() |./div[3]/h2/a/text()")[0] # xpath中可以使用管道符表示或的关系,用这两种规则进行匹配
"""
彼岸图网图片爬取
注意:这里遇到中文乱码问题 解决方法一:
# 处理中文乱码,将响应数据统一编码成utf-8
# response.encoding = "utf-8" 解决方法二:
# 哪里乱码解码哪里
img_name.encode("iso-8859-1").decode("gbk")
import os
import urllib
import requests
from lxml import etree
url = "http://pic.netbian.com/4kmeinv/"
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
response = requests.get(url=url,headers=headers) # 处理中文乱码,将响应数据统一编码成utf-8
# response.encoding = "utf-8"
if not os.path.exists("./imgs"):
os.mkdir("./imgs")
page_text = response.text
# 实例化etree对象并加载页面源码数据
tree = etree.HTML(page_text)
# 找到所有li标签
li_list = tree.xpath("//div[@class='slist']/ul/li")
for li in li_list:
img_name = li.xpath("./a/b/text()")[0] # ./代表从li标签开始解析,不写m默认从整张HTML页面开始解析
# 处理中文乱码
img_name = img_name.encode("iso-8859-1").decode("gbk")
# 拼接图片路径
img_url = "http://pic.netbian.com" + li.xpath("./a/img/@src")[0]
img_path = "./imgs/" + img_name+".jpg"
# 调用urllib中的urlretrieve方法存储
urllib.request.urlretrieve(url=img_url,filename=img_path)
print("正在下载",img_name)
print("download ok")
爬虫之解析库Xpath的更多相关文章
- python爬虫三大解析库之XPath解析库通俗易懂详讲
目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介 XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...
- 网页解析库-Xpath语法
网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...
- Python爬虫【解析库之beautifulsoup】
解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...
- Python爬虫【解析库之pyquery】
该库跟jQuery的使用方法基本一样 http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...
- Python3编写网络爬虫05-基本解析库XPath的使用
一.XPath 全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是它同样适用于HTML文档的搜索 XPath 的选择功能十分强大,它提供了 ...
- 爬虫解析库xpath
# xpath简介 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言.用于在 XML 文档中通过元素和属性进行导航. XPath基于XM ...
- python爬虫基础04-网页解析库xpath
更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 ...
- python爬虫之解析库Beautiful Soup
为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...
- python爬虫之解析库正则表达式
上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性 @href @class span 抑或是p节点里 ...
随机推荐
- (七)Activiti之历史活动查询和历史任务查询和流程状态查询
一.历史活动查询 本章案例是基于上一章节案例的基础上,流程走完后进行测试的,也就是下图的流程从学生请假到班主任审批都已经完成,本章用来测试查询历史活动和历史任务的 activiti5的历史活动包括所有 ...
- Recastnavigation 创建 off-mesh link 的潜规则
Recastnavigation 在创建off-mesh link 时,发现有的off-mesh link 无法寻路(虽然在地图上能看到off-mesh link 的连线 在Google Grou ...
- 使用私有api实现自己的iphone桌面,并根据app的使用次数对app排序
使用<iphone SprintBoard部分私有API总结>中提到的api,除了能对app运行次数进行监控以外,还可以实现自己的iphone桌面,并根据app 的使用次数对app图标进行 ...
- MUI顶部导航布局
一.头部 核心css mui-bar mui-bar-nav <header class="mui-bar mui-bar-nav"> <a class=&quo ...
- MySQL之字符函数
MySql中提供一些函数对我们的开发有很多的帮助,下面就把MysQL提供的一些常用函数整理下,首先是字符处理函数: 1.CONCAT() 用法:字符串链接函数,将字符串字段连结在一块 举例: sele ...
- 成为一个高级java架构师所需要具备那些技能呢?
一.什么是架构师 所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等.可能涉及到 ...
- 作为一个java高级工程师的进阶之路
本文可能可能更偏向于是内心的独白篇和面试技巧总结 一.独白 之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样,比如我面试别人我喜欢问项目中他用到了那些,然后针对 ...
- nginx搭建反向代理服务器详解
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- libssh2--ssh2实例
#include "libssh2_config.h"#include<libssh2.h>#include<libssh2_sftp.h> 上述为所包含必 ...
- 使用vs编写arduino项目
说实话,arduino官方自带的编辑器有时候用的真不爽.所以直接使用vs开发arduino项目,用起来真爽,一直使用一直爽. 不多废话,直接上图,三部曲结束,搞定,收工. 我用的是vs2015版本的. ...