爬虫之解析库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节点里 ...
随机推荐
- [Vue]axios 发出请求的config
这些是用于发出请求的可用配置选项. 只有url是必需的. 如果未指定方法,请求将默认为GET. { // `url`是将用于请求的服务器URL url: '/user', // `method`是发出 ...
- (十三)使用handler实现登录验证
一.Handel概念 J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter.我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请 ...
- Vue绑定的table页面在Chrome浏览器左右抖动
现象: 今天Chrome浏览器升级到最新版本(75.0.3770.100),突然发现之前vue页面只要绑定了el-table标签的,都在左右抖动,抖动得眼睛都花了,百度上找半天也没有遇到相同问题的人, ...
- Q-Dir
Q-dir,可以分界面,分文件夹,快捷选择等优势,非常好用的工具,可以替代微软的File Explorer. 官网:https://www.softwareok.com/?seite=Freeware ...
- 基于【 centos7】四 || FastDFS集群+Nginx负载均衡
1. 架构设计 1.1 架构图 FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用F ...
- elementui 树控件只隐藏第三集菜单
<!-- 必须属性:default-expanded-keys node-key --> <el-tree :default-expanded-keys='idArr' node-k ...
- 定位之z-index
我们已经知道固定定位(fixed)和绝对定位(absolute)可以让盒子浮起来 相对定位(relactive)虽然不能让盒子浮起来,但也是可以让图层浮起来 那么既然大家都可以浮起来,就会存在一个问题 ...
- 8.读写锁ReadWriteLock
/*ReadWriteLock 读写锁*/ private ReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().loc ...
- Python之定义默认参数
定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 > ...
- Java Socket编程----网络基础
详见:https://www.cnblogs.com/rocomp/p/4790340.html Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而 ...