本节课程主要介绍解析神器Xpath是什么、Xpath如何安装及使用,以及使用实际的例子讲解Xpath如何解析豆瓣短评的网页并获取数据。

  • 解析神器Xpath
  • Xpath的使用
  • 实战环节

解析神器Xpath:

1. 什么是Xpath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

可以阅读该文档了解更多关于Xpath的知识。

2. Xpath解析网页的流程

  • 首先通过Requests库获取网页数据
  • 通过网页解析,得到想要的数据或者新的链接
  • 网页解析可以通过Xpath或者其它解析工具进行,Xpath在是一个非常好用的网页解析工具

3. 常用的网页解析 

  • 正则表达式使用比较困难,学习成本较高
  • BeautifulSoup性能较慢,相对于Xpath较难,在某些特定场景下有用
  • Xpath使用简单,速度快(Xpath是lxml里面的一种),是抓取数据最好的选择

4. Xpath的安装

pip install lxml

Xpath的使用:

1. 使用Xpath解析网页数据的步骤

  • 从lxml导入etree
  • 解析数据,返回xml结构
  • 使用.xpath()寻找和定位数据
from lxml import etreehtml ='''#省略'''#html数据,使用requests获取s = etree.HTML(html)#解析html数据print(s.xpath())#使用.xpath()

2. 获取Xpath的方法

  • 第一种方法:从浏览器直接复制
  • 首先在浏览器上定位到需要爬取的数据
  • 右键,点击“检查”,在“Elements”下找到定位到所需数据
  • 右键——Copy——Copy Xpath,即可完成Xpath的复制
  • 示例:
#从浏览器直接复制Xpath
import requests
from lxml import etreeurl = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).texts = etree.HTML(r)
print(s.xpath('//*[@id=“comments”]/ul/li[1]/div[2]/p/text()'))
  • 第二种方法:手写Xpath
  • 获取文本内容用 text()
  • 获取注释用 comment()
  • 获取其它任何属性用@xx,如: 
    href 
    src 
    value
  • 想要获取某个标签下所有的文本(包括子标签下的文本),使用string 
    如”< p>123< a>来获取我啊< /a>< /p>”,这边如果想要得到的文本为”123来获取我啊”,则需要使用string
  • starts-with 匹配字符串前面相等
  • contains 匹配任何位置相等
  • 示例:
#手写Xpath
import requests
from lxml import etreeurl = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).texts = etree.HTML(r)
print(s.xpath('//div[@class="comment"]/p/text()')[0])

实战环节

使用Xpath爬取豆瓣图书《小王子》短评网页

  • 使用从浏览器复制Xpath的方法获取同一网页下不同短评的Xpath,通过对比发现其规律
  • 对比从浏览器复制Xpath的方法跟手写Xpath的方法的不同点已经两种方法各自的应用场景
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 17 11:54:48 2018@author: Jackie
"""import requests
from lxml import etree  url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text  s = etree.HTML(r)
#从浏览器复制第一条评论的Xpath
print(s.xpath('//*[@id="comments"]/ul/li[1]/div[2]/p/text()'))
#从浏览器复制第二条评论的Xpath
print(s.xpath('//*[@id="comments"]/ul/li[2]/div[2]/p/text()'))
#从浏览器复制第三条评论的Xpath
print(s.xpath('//*[@id="comments"]/ul/li[3]/div[2]/p/text()')) #掌握规律,删除li[]的括号,获取全部短评
print(s.xpath('//*[@id="comments"]/ul/li/div[2]/p/text()'))  #手写Xpath获取全部短评
print(s.xpath('//div[@class="comment"]/p/text()'))
  • 通过对比可以发现从浏览器复制的Xpath中,“li[]”括号中的数字代表对应的第几条评论,直接删除括号,即可获取全部短评
  • 对于结构清晰的html网页,可以直接手写Xpath,更加简洁且高效
  • 对于结构复杂的html网页,可以通过浏览器复制的方式获取Xpath

课后练习:爬取小猪短租(深圳)页面的数据

  • 首先使用浏览器打开小猪短租(深圳) 的页面,通过阻止JavaScript加载的方法确定网页的加载方式
  • 可以发现,阻止JavaScript加载之后页面还是可以显示短租的标题、价格等数据
  • 接下来便可以爬取这一部分可显示的数据,在此例子中,我们主要爬取单个页面中每条短租信息的标题、价格和经纬度
import requests
from lxml import etree
url = 'http://sz.xiaozhu.com/'
r = requests.get(url).text#使用requests获取数据
s = etree.HTML(r)#解析html数据
print(s.xpath('//*[@id="page_list"]/ul/li/div[2]/div/a/span/text()'))#打印短租标题
print(s.xpath('//*[@id="page_list"]/ul/li/div[2]/span[1]/i/text()'))#打印短租价格
print(s.xpath('//*[@id="page_list"]/ul/li/@latlng'))#打印短租经纬度

更详细过程可参考: python爬虫实践——零基础快速入门(四)爬取小猪租房信息

课后练习:虎扑

Copy Xpath可以看到虎扑的标题:

/html/body/div[4]/div[1]/div[1]/div[2]/dl/dd[1]/a[1]
/html/body/div[4]/div[1]/div[1]/div[2]/dl/dd[1]/a[2]
/html/body/div[4]/div[1]/div[1]/div[2]/dl/dd[2]/a[1]

所以猜测标题的Xpath为

/html/body/div[4]/div[1]/div[1]/div[2]/dl/dd/a

代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 27 17:37:45 2018@author: Jackie
"""import requests
from lxml import etree
import timeurl3 = 'https://nba.hupu.com/'
data3 = requests.get(url3).text
h = etree.HTML(data3)
titles = h.xpath('/html/body/div[4]/div[1]/div[1]/div[2]/dl/dd/a/text()')for title in titles:print (title)

结果:

补充知识

Xpath教程

  • 阅读Xpath教程,掌握Xpath的基本知识

Xpath的基本使用

  • 阅读爬虫入门到精通-网页的解析(xpath),参考Xpath的使用方法
  • 阅读Python爬虫利器三之Xpath语法与lxml库的用法,了解更多Xpath的使用方法示例

正则表达式

  • 阅读Python正则表达式,了解正则表达式及其基本的语法
  • 阅读爬虫入门到精通-网页的解析(正则),学习使用正则表达式匹配网页数据

BeautifulSoup

  • 阅读Beautiful Soup 中文教程,了解使用BeautifulSoup解析网页的方法
  • 阅读Beautiful Soup 4.2.0 文档这篇BeautifulSoup的官方文档,了解其更加全面的用法

Python爬虫(入门+进阶)学习笔记 1-4 使用Xpath解析豆瓣短评相关推荐

  1. Python爬虫入门实战学习笔记(一)

    (全部代码在最后,学自"我的IT私塾") 什么是爬虫 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本.由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关 ...

  2. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  3. 全网最全python爬虫系统进阶学习(附原代码)学完可就业

    个人公众号 yk 坤帝 后台回复 爬虫进阶 获取全部源代码 5.2(第二天) 第一章 爬虫介绍 1.认识爬虫 第二章:requests实战(基础爬虫) 1.豆瓣电影爬取 2.肯德基餐厅查询 3.破解百 ...

  4. python爬虫(个人学习笔记)

    在学习过程中是跟随 https://www.bilibili.com/video/BV12E411A7ZQ?p=26&spm_id_from=pageDriver视频中的老师 自己多写两遍也就 ...

  5. Python爬虫框架Scrapy学习笔记

    scrapy.png 本文主要内容针对Scrapy有初步了解的同学.结合作者的实际项目中遇到的一些问题,汇成本文. 之后会写一些具体的爬虫demo, 放到 https://github.com/han ...

  6. Python爬虫框架Scrapy学习笔记原创

    字号 scrapy [TOC] 开始 scrapy安装 首先手动安装windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twis ...

  7. 进一步了解XPath(利用XPath爬取飞哥的博客)【python爬虫入门进阶】(04)

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文是爬虫专栏的第四篇,重点介绍lxml库与XPath搭配使用解析网页提取网页内容. 干货满满,建议收藏,系列文章持续更新. 小伙伴们如有问题及需 ...

  8. Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令

    1. 有些scrapy命令,只有在scrapy project根目录下才available,比如crawl命令 2 . scrapy genspider taobao http://detail.tm ...

  9. python爬虫 入门+进阶_python爬虫入门到进阶(三)

    本节: 带Cookies的访问 设置headers访问绕过网站检测 设置Headers 有些网站会验证访问者是否合法,所以上一节的访问方式在一些网站就会失灵 ,网站对请求不予以响应,为了模拟浏览器工作 ...

最新文章

  1. 解决java poi导出excel2003不能超过65536行的问题
  2. 文件分片_怎样屏蔽QQ和微信外发文件,同时允许发送截图
  3. 权限设计表结构超详细_模具设计丨问题点检表、全套标准件结构分布,值得转发...
  4. 【wpf】在win10系统上弹出toast和notification
  5. 安卓(Android)+苹果(Ios)仿微信、陌陌 移动社交APP系统源码,手机IM聊天软件源码,企业即时通讯APP程序源码...
  6. 原创 | 职场二十年(一)电话风波
  7. 数据可视化之旅(五):常用图表对比
  8. java field的方法_Java Field 详解
  9. 爬虫(29)mongodb(下)
  10. mysqloffset什么意思_MySQL中OFFSET和FETCH的详解
  11. C++小游戏《末日之战1:新生》1.12.31823.132
  12. Python标准库:内置函数complex([real[, imag]])
  13. 奖励补贴有点多!武汉市大健康和生物技术产业发展奖励措施解读
  14. windows和linux快捷键
  15. 第三方支付躺赚的好日子结束:银行直连模式瓦解
  16. 合成大西瓜html源码,合成大西瓜
  17. python(opencv) SVM 测试使用
  18. 《从1到N企业数字化生存指南》读书笔记
  19. 今天特意分享一个程序猿的微信群,聊天专用
  20. java launcher在哪_JAVA Launcher简析

热门文章

  1. 格式化磁盘时文件系统格式选择
  2. A. I Wanna Be the Guy
  3. testdisk windows mac linux,TestDisk for Mac-TestDisk Mac版下载 V7.2-PC6苹果网
  4. Angular集成Bootstrap库
  5. spring整合MyBatis 实现代理(proxy) 打印用时信息 小记
  6. 谷歌蜘蛛池-悟空蜘蛛池
  7. 无线网卡报错:windows仍在设置此设备的类配置(代码56)解决window11 无wifi按钮\无法连接有线网络问题
  8. Visual Studio创建webapi示例
  9. Exchange发送邮件后卡在草稿箱
  10. 关于接口中定义的变量