从0开始学爬虫3之xpath的介绍和使用
从0开始学爬虫3之xpath的介绍和使用
Xpath:一种HTML和XML的查询语言,它能在XML和HTML的树状结构中寻找节点
安装xpath:
pip install lxml
HTML
超文本标记语言(HyperText Mark-up Language),是一种规范,一种标准,是构成网页文档的主要语言
URL
统一资源定位器(Uniform Resource Locator),互联网上的每个文件都有一个唯一的URL,它包含的信息之处文件的位置以及浏览器应该怎么处理它

Xpath的使用语法:
获取文本:
//标签1[@属性1=”属性值1”]/标签2[@属性2=”属性值2”]/…/text()
获取属性值
//标签1[@属性1=”属性值1”]/标签2[@属性2=”属性值2”]/…/@属性n

使用pycharm虚拟环境安装xpath模块


Xpath使用示例
用来进行xpath测试的网页 static/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>网页测试</title>
<link rel="stylesheet" href="">
</head>
<body>
<h3>标题</h3>
<ul>
<li>内容1</li>
<li>内容2</li>
<li class="important">内容3important</li>
<li>内容4</li>
<li>内容5</li> </ul>
<div>
内容未知
</div>
<p>
段落内容 from p
</p>
<div id="container">
段落文字
<a href="http://www.baidu.com" title="超链接">跳转到百度首页</a>
<p class="content">
区块内容1
</p>
<p class="content">
区块内容2
</p>
<p class="content">
区块内容3
</p>
<p class="content">
区块内容4
</p>
<p class="content-block">
区块内容5 from block
</p>
<p class="content-block">
区块内容6 末尾内容
</p>
<a href="http://www.so.com" title="超链接">跳转到360搜索首页</a>
</div>
<p>
最后一段文字
</p>
</body>
</html>
xpath使用示例
#coding=utf-8
from lxml import html def parse():
"""将html文件中的内容,使用xpath进行提取"""
# 读取文件中的内容
f = open('./static/index.html', 'r', encoding='utf-8')
s = f.read() selector = html.fromstring(s)
# 解析H3标题
h3 = selector.xpath('/html/body/h3/text()')
print(h3[0])
# 解析ul下面的内容
# ul = selector.xpath('/html/body/ul/li')
# 双斜线语法
ul = selector.xpath("//ul/li")
print(len(ul))
for li in ul:
print(li.xpath('text()')[0]) # 解析ul指定的元素值
ul2 = selector.xpath('/html/body/ul/li[@class="important"]/text()')
print(ul2) # 解析a标签的内容,拆分的方式
# a = selector.xpath('//div[@id="container"]/a')
# 标签内的内容
# print(a[0].xpath("text()")[0])
# 得到标签的属性
# print(a[0].xpath("@href")[0])
# div[id="container"] 的第二个a标签内容
# print(a[1].xpath("text()"))
# print(a[1].xpath("@href")[0]) # 解析a标签的内容,一次性解析的方式
a1 = selector.xpath('//div[@id="container"]/a/text()')
# 标签内容
print(a1[0])
# 标签数学
alink = selector.xpath('//div[@id="container"]/a/@href')
print(alink[0]) # 解析p标签
p = selector.xpath('/html/body/p[last()]/text()')
print(p[0])
f.close() if __name__ == "__main__":
parse()
当我们在页面中找不到xpath的时候可以使用chrome的copy xpath进行参考

从0开始学爬虫3之xpath的介绍和使用的更多相关文章
- 从0开始学爬虫2之json的介绍和使用
从0开始学爬虫2之json的介绍和使用 Json 一种轻量级的数据交换格式,通用,跨平台 键值对的集合,值的有序列表 类似于python中的dict Json中的键值如果是字符串一定要用双引号 jso ...
- 从0开始学爬虫12之使用requests库基本认证
从0开始学爬虫12之使用requests库基本认证 此处我们使用github的token进行简单测试验证 # coding=utf-8 import requests BASE_URL = " ...
- 从0开始学爬虫11之使用requests库下载图片
从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...
- 从0开始学爬虫9之requests库的学习之环境搭建
从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...
- 从0开始学爬虫8使用requests/pymysql和beautifulsoup4爬取维基百科词条链接并存入数据库
从0开始学爬虫8使用requests和beautifulsoup4爬取维基百科词条链接并存入数据库 Python使用requests和beautifulsoup4爬取维基百科词条链接并存入数据库 参考 ...
- 从0开始学爬虫4之requests基础知识
从0开始学爬虫4之requests基础知识 安装requestspip install requests get请求:可以用浏览器直接访问请求可以携带参数,但是又长度限制请求参数直接放在URL后面 P ...
- 从0开始学爬虫10之urllib和requests库与github/api的交互
urllib库的使用 # coding=utf-8 import urllib2 import urllib # htpbin模拟的环境 URL_IP="http://10.11.0.215 ...
- 从0开始学爬虫7之BeautifulSoup模块的简单介绍
参考文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ # 安装 beautifulsoup4 (pytools) D:\pyt ...
- 一起学爬虫——使用selenium和pyquery爬取京东商品列表
layout: article title: 一起学爬虫--使用selenium和pyquery爬取京东商品列表 mathjax: true --- 今天一起学起使用selenium和pyquery爬 ...
随机推荐
- k8s安装之node-autoapprove-certificate-server.yaml
kubelet证书分为server和client两种, k8s 1.9默认启用了client证书的自动轮换,但server证书自动轮换需要用户开启.方法是: 2.1 增加 kubelet 参数(现已默 ...
- 51nod 2485 小b重排字符串
小b有一个字符串S,现在她希望重排列S,使得S中相邻字符不同. 请你判断小b是否可能成功. 样例解释:将"aab"重排为"aba"即可. 收起 输入 输入一 ...
- tomcat绑定项目classes路径
在Host中加入如下内容: <Context path="" docBase="D:\svn\MainSource\WebRoot" debug=&quo ...
- go语言-二进制与位运算
一.进制介绍 1.二进制:0,1 -->不能直接用二进制来表示一个整数,用%b输出二进制 package mainimport "fmt"func main() { var ...
- 华硕ASUS U5800GE驱动
重要的触摸板 微软商店 ASUS Keyboard Hotkeys 设备管理器 人体学输入设备 ASUS Precision Touchpad (ScreenPad) Asus ScreenPad D ...
- docker 构建自己的image 镜像文件
docker build 构建自己的镜像文件. 1.在本地工程中运行生成一个springboot的可运行的jar. 因为我习惯用eclipse,所以在eclipse下新建一个springboot的工程 ...
- Tensorflow细节-P170-图像数据预处理
由于6.5中提出的TFRecord非常复杂,可扩展性差,所以本节换一种方式 import tensorflow as tf from tensorflow.examples.tutorials.mni ...
- YAML_04 用user模块添加用户,并修改密码
ansible]# vim user.yml --- - hosts: cache remote_user: root vars: username: lisi tasks: ...
- c函数指针和指针函数如何使用何定义;如何调用使用
#include <stdio.h> int * sum(int x); //声明一个 指针函数 返回类型位一个指针变量 可以通过*p来获取值 int (*pfun)(int,int);/ ...
- 洛谷 P2894 [USACO08FEB]酒店
题目描述 用线段树维护三个值:区间最长空位长度,从左端点可以延伸的最长空位长度,从右端点可以延伸的最长空位长度. #include<complex> #include<cstdio& ...