lxml,xpath
XPath与lxml结合使用
一、lxml作用
将html字符串进行解析,供xpath语法进行数据提取
二、提取如下HTML页面的内容
text = \
"""
<ul class="ullist" padding="1" spacing="1"><li><div id="top"><span class="position" width="350">职位名称</span><span>职位类别</span><span>人数</span><span>地点</span><span>发布时间</span></div><div id="even"><span class="l square"><a target="_blank" href="position_detail.php?id=33824&keywords=python&tid=87&lid=2218">python开发工程师</a></span><span>技术类</span><span>2</span><span>上海</span><span>2018-10-23</span></div><div id="odd"><span class="l square"><a target="_blank" href="position_detail.php?id=29938&keywords=python&tid=87&lid=2218">python后端</a></span><span>技术类</span><span>2</span><span>上海</span><span>2018-10-23</span></div><div id="even"><span class="l square"><a target="_blank" href="position_detail.php?id=31236&keywords=python&tid=87&lid=2218">高级Python开发工程师</a></span><span>技术类</span><span>2</span><span>上海</span><span>2018-10-23</span></div><div id="odd"><span class="l square"><a target="_blank" href="position_detail.php?id=31235&keywords=python&tid=87&lid=2218">python架构师</a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div><div id="even"><span class="l square"><a target="_blank" href="position_detail.php?id=34531&keywords=python&tid=87&lid=2218">Python数据开发工程师</a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div><div id="odd"><span class="l square"><a target="_blank" href="position_detail.php?id=34532&keywords=python&tid=87&lid=2218">高级图像算法研发工程师</a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div><div id="even"><span class="l square"><a target="_blank" href="position_detail.php?id=31648&keywords=python&tid=87&lid=2218">高级AI开发工程师</a></span><span>技术类</span><span>4</span><span>上海</span><span>2018-10-23</span></div><div id="odd"><span class="l square"><a target="_blank" href="position_detail.php?id=32218&keywords=python&tid=87&lid=2218">后台开发工程师</a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div><div id="even"><span class="l square"><a target="_blank" href="position_detail.php?id=32217&keywords=python&tid=87&lid=2218">Python开发(自动化运维方向)</a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div><div id="odd"><span class="l square"><a target="_blank" href="position_detail.php?id=34511&keywords=python&tid=87&lid=2218">Python数据挖掘讲师 </a></span><span>技术类</span><span>1</span><span>上海</span><span>2018-10-23</span></div></li>
</ul>
"""
进行工作之前,我们先把html字符串解析为html文档
from lxml import etree
html = etree.HTML(text)
1.获取所有的div标签[结点选取]
divs = html.xpath('//div')
print(divs)
此时我们发现并没有得到div标签,为什么呢?
要想得到所有div标签,我们首先想到的是for循环;
其次如何获取才是重点;
当然,前面讲过,要想xpath提取数据,首先得让lxml将html字符串进行解析;
for div in divs:d = etree.tostring(div,encoding='utf8').decode('utf8')print(d)print("*"*10)
这样我们就获取了所有的div标签啦。
2.获取某个指定的div标签[谓语的使用]
div = html.xpath('//div[1]')
print(etree.tostring(div,encoding='utf8').decode('utf8'))
看代码符合逻辑,可是我们执行完后报错了?
这里我们就要注意了:xpath提取数据时必定是列表,所以正确代码为:
div = html.xpath('//div[1]')[0]
print(etree.tostring(div,encoding='utf8').decode('utf8'))
3.获取所有id="even"的div标签
divs = html.xpath('//div/[@id="even"]')
for div in divs:d = etree.tostring(div,encoding='utf8').decoding('utf8')print(d)print('%'*10)
4.获取标签的某个属性
(1)获取所有div的id属性的值
divs = html.xpath('//div/@id')
print(divs)
(2)获取所有a标签的href属性的值
hrefs = html.xpath('//a/@href')
print(hrefs)
5.获取div里面所有的职位信息
我们可以看到第一个div里面并不是我们所需要的信息,所以要注意div的取值。
得到信息为了直观,我们选择存储在列表里面。
divs = html.xpath('//div[position()>1]')
works = []
for div in divs:work={}#获取a标签下的href属性url = divs.xpath('.//a/@href')[0]#获取a标签下的文本信息position = divs.xpath('.//a/text()')[0]#获取工作类型work_type = divs.xpath('.//span[2]/text')[0]#获取职位人数nums = divs.xpath('.//span[3]/text()')[0]#获取工作地点area = divs.xpath('.//span[4]/text()')[0]#获取发布时间time = divs.xpath('.//span[5]/text()')[0]work={"url":url,"position":position,"work_type":work_type,"nums":nums,"area":area,"time":time}works.append(work)
综上,只有掌握了xpath语法,想拿到自己想要的数据岂不是小菜一碟?
lxml,xpath相关推荐
- lxml xpath 爬取并正常显示中文内容
在使用python爬虫提取中文网页的内容,为了能正确显示中文的内容,在转为字符串时一定要声明编码为utf-8,否则无法正常显示中文,而是显示原编码的字符,并没有正确转换.比如下面这个简单的爬取百度页面 ...
- Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息
目录 一.XPath 二.XPath 常用规则 三.在谷歌浏览器安装XPath插件 四.Python爬虫常用插件 五.使用Xpath解析 六.Xpath匹配示例 1.查看所有的标签(如p.a.li标签 ...
- 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...
http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子,主要是单单写 lxml 与 bs4 这两个 py 模块名可 ...
- python爬虫lxml xpath测试
xpath测试1: main.py """=== coding: UTF8 ===""" from lxml import etreexml ...
- python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?
例如,要获得一个类似以下内容的输出,需要什么 "现金和短期投资144841 169760 189252 86743 57379"?或者类似"物业.厂房和设备-总价值725 ...
- python之lxml(xpath)
bs4确实没这个好用,bs4的树太复杂 lxml很好 定位非常好 详细解说在注释里面有了 1 #!/usr/bin/python3.4 2 # -*- coding: utf-8 -*- 3 4 fr ...
- LXML(Xpath)解析库的使用
简介 xpath是一种html和xml的查询语言,它能够在html和xml的树状结构中寻找节点 基础知识 https://mp.weixin.qq.com/s?__biz=MzAxMTkwODIyNA ...
- python lxml xpath爬取图片代码
main.py """=== coding: UTF8 ===""" import requests from lxml import et ...
- 使用lxml+xpath解析html页面
@待解析的页面 <!DOCTYPE html> <html lang="en"> <title>Title</title> < ...
最新文章
- 更改mvc版本的时候,手动修改交3.0改到4.0,将razor改到2.0,仍然提示出现错误,mvc3.0...
- HanLP二元核心词典详细解析
- 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。
- c/s三层结构信息系统的三个层次_如何使用ABP框架(2)三层架构与领域驱动设计的对比...
- MySQL还是h5储存数据_h5中五大存储方式
- 行高引起的行内块级元素间距
- 【学习OpenCV4】图像变换方法总结(放缩、翻转、旋转)
- BZOJ 4802 欧拉函数(Pollard_Rho)
- python selenium点击网页关闭按钮_基于python的selenium-打开关闭第二个页面
- mouseover mouseout和mouseenter mouseleave的区别
- 学好Python的11个优秀资源
- 基于matlab的产生式系统案例
- 软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?
- kubernetes 日志收集
- 20150609.C语言-尹成-专题视频课程
- 基于光栅波导结构的 R ARMR 系统的 建模
- 百度升级烽火算法2.0,建议网站https改造打击网站劫持
- 机器学习对回归模型的评价指标:均方误差、可解释方差和R方值
- python函数测验题_python 函数练习题
- 微信小程序 pages的使用