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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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&amp;keywords=python&amp;tid=87&amp;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相关推荐

  1. lxml xpath 爬取并正常显示中文内容

    在使用python爬虫提取中文网页的内容,为了能正确显示中文的内容,在转为字符串时一定要声明编码为utf-8,否则无法正常显示中文,而是显示原编码的字符,并没有正确转换.比如下面这个简单的爬取百度页面 ...

  2. Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息

    目录 一.XPath 二.XPath 常用规则 三.在谷歌浏览器安装XPath插件 四.Python爬虫常用插件 五.使用Xpath解析 六.Xpath匹配示例 1.查看所有的标签(如p.a.li标签 ...

  3. 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...

    http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子,主要是单单写 lxml 与 bs4 这两个 py 模块名可 ...

  4. python爬虫lxml xpath测试

    xpath测试1: main.py """=== coding: UTF8 ===""" from lxml import etreexml ...

  5. python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?

    例如,要获得一个类似以下内容的输出,需要什么 "现金和短期投资144841 169760 189252 86743 57379"?或者类似"物业.厂房和设备-总价值725 ...

  6. python之lxml(xpath)

    bs4确实没这个好用,bs4的树太复杂 lxml很好 定位非常好 详细解说在注释里面有了 1 #!/usr/bin/python3.4 2 # -*- coding: utf-8 -*- 3 4 fr ...

  7. LXML(Xpath)解析库的使用

    简介 xpath是一种html和xml的查询语言,它能够在html和xml的树状结构中寻找节点 基础知识 https://mp.weixin.qq.com/s?__biz=MzAxMTkwODIyNA ...

  8. python lxml xpath爬取图片代码

    main.py """=== coding: UTF8 ===""" import requests from lxml import et ...

  9. 使用lxml+xpath解析html页面

    @待解析的页面 <!DOCTYPE html> <html lang="en"> <title>Title</title> < ...

最新文章

  1. 更改mvc版本的时候,手动修改交3.0改到4.0,将razor改到2.0,仍然提示出现错误,mvc3.0...
  2. HanLP二元核心词典详细解析
  3. 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。
  4. c/s三层结构信息系统的三个层次_如何使用ABP框架(2)三层架构与领域驱动设计的对比...
  5. MySQL还是h5储存数据_h5中五大存储方式
  6. 行高引起的行内块级元素间距
  7. 【学习OpenCV4】图像变换方法总结(放缩、翻转、旋转)
  8. BZOJ 4802 欧拉函数(Pollard_Rho)
  9. python selenium点击网页关闭按钮_基于python的selenium-打开关闭第二个页面
  10. mouseover mouseout和mouseenter mouseleave的区别
  11. 学好Python的11个优秀资源
  12. 基于matlab的产生式系统案例
  13. 软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?
  14. kubernetes 日志收集
  15. 20150609.C语言-尹成-专题视频课程
  16. 基于光栅波导结构的 R ARMR 系统的 建模
  17. 百度升级烽火算法2.0,建议网站https改造打击网站劫持
  18. 机器学习对回归模型的评价指标:均方误差、可解释方差和R方值
  19. python函数测验题_python 函数练习题
  20. 微信小程序 pages的使用

热门文章

  1. 一步一步开发Game服务器(二)完成登陆,聊天
  2. 数据结构之有效的括号
  3. PPT的常用技巧(1):
  4. 天翼云80/8080/443端口访问不通问题
  5. C++ 编译宏的一些符号
  6. Cors跨域(一):深入理解跨域请求概念及其根因
  7. 为什么每个语言都要和Java作比较?一文带你搞懂!
  8. 数字后端基本概念介绍——Pin Blockage
  9. 【区块链 | AAVE】一文讲清-DeFI王者AAVE最新的稳定币GHO提案
  10. 2022 AI 岗位风向标