@1-4使用Xpath解析豆瓣短评
使用Xpath解析豆瓣短评
本节课程主要介绍解析神器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安装,直接在命令行输入以下代码
- 第二种方法:使用下载whl文件方法安装(安装方法跟上节课安装Requests库方法相同),这种方法在直接使用pip安装不成功的情况下采用
- 第一步前往http://www.lfd.uci.edu/~gohlke/pythonlibs/,手动下载需要安装的第三方包(注意对应你的python版本是32位还是64位)
- 然后在下载下来的文件所在目录按住shift并点击鼠标右键,选择在此处打开Powershell窗口,在此命令行中使用“pip install + 下载下来文件全名”,即可完成安装
- 检查安装:进入Python,输入import lxml导入新安装的lxml,如果没有返回错误便说明已安装成功
Xpath的使用:
1. 使用Xpath解析网页数据的步骤
- 从lxml导入etree
- 解析数据,返回xml结构
- 使用.xpath()寻找和定位数据
2. 获取Xpath的方法
- 第一种方法:从浏览器直接复制
- 首先在浏览器上定位到需要爬取的数据
- 右键,点击“检查”,在“Elements”下找到定位到所需数据
- 右键——Copy——Copy Xpath,即可完成Xpath的复制
- 示例:
- 第二种方法:手写Xpath
- 获取文本内容用 text()
- 获取注释用 comment()
- 获取其它任何属性用@xx,如:
href
src
value- 想要获取某个标签下所有的文本(包括子标签下的文本),使用string
如”< p>123< a>来获取我啊< /a>< /p>”,这边如果想要得到的文本为”123来获取我啊”,则需要使用string- starts-with 匹配字符串前面相等
- contains 匹配任何位置相等
- 示例:
实战环节
使用Xpath爬取豆瓣图书《小王子》短评网页
- 使用从浏览器复制Xpath的方法获取同一网页下不同短评的Xpath,通过对比发现其规律
- 对比从浏览器复制Xpath的方法跟手写Xpath的方法的不同点已经两种方法各自的应用场景
- 通过对比可以发现从浏览器复制的Xpath中,“li[]”括号中的数字代表对应的第几条评论,直接删除括号,即可获取全部短评
- 对于结构清晰的html网页,可以直接手写Xpath,更加简洁且高效
- 对于结构复杂的html网页,可以通过浏览器复制的方式获取Xpath
课后作业
1. 安装lxml
2. 使用Xpath解析豆瓣网页
3. 勇敢尝试你想爬取的网站
A. 爬取知乎“Python”话题精华数据
import requestsurl = 'https://www.zhihu.com/topic/19552832/top-answers'r = requests.get(url).textprint(r)
- 尝试着使用前面所学习的方法获取知乎“Python”话题精华的网页并打印出来,看看会出现什么问题
- 由于知乎反爬虫的原因,以上代码会返回“500 Server Error”,具体的解决方法会在第六课学习到
B. 爬取小猪短租(深圳)页面的数据
爬取小猪短租(深圳)页面的短租标题、价格和经纬度,如图:
代码如下:import requestsfrom lxml import etreeurl = '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'))#打印短租经纬度
- 首先使用浏览器打开小猪短租(深圳) 的页面,通过阻止JavaScript加载的方法确定网页的加载方式
- 可以发现,阻止JavaScript加载之后页面还是可以显示短租的标题、价格等数据
- 接下来便可以爬取这一部分可显示的数据,在此例子中,我们主要爬取单个页面中每条短租信息的标题、价格和经纬度
补充知识
Xpath教程
- 阅读Xpath教程,掌握Xpath的基本知识
Xpath的基本使用
- 阅读爬虫入门到精通-网页的解析(xpath),参考Xpath的使用方法
- 阅读Python爬虫利器三之Xpath语法与lxml库的用法,了解更多Xpath的使用方法示例
正则表达式
- 阅读Python正则表达式,了解正则表达式及其基本的语法
- 阅读爬虫入门到精通-网页的解析(正则),学习使用正则表达式匹配网页数据
BeautifulSoup
- 阅读Beautiful Soup 中文教程,了解使用BeautifulSoup解析网页的方法
- 阅读Beautiful Soup 4.2.0 文档这篇BeautifulSoup的官方文档,了解其更加全面的用法
关注DC,获取更多学习资源
@1-4使用Xpath解析豆瓣短评的更多相关文章
- @1-5使用pandas保存豆瓣短评数据
使用pandas保存豆瓣短评数据 Python爬虫(入门+进阶) DC学院 本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据. ...
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
<哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...
- 爬虫的三种解析方式(正则解析, xpath解析, bs4解析)
一 : 正则解析 : 常用正则回顾: 单字符: . : 除换行符以外的所有字符 [] : [aoe] [a-w] 匹配集合中任意一个字符 \d : 数字 [0-9] \D : 非数字 \w : 非数字 ...
- Xpath解析库的使用
### Xpath常用规则 ## nodename 选取此节点的所有子节点 ## / 从当前节点选取直接子节点 ## // 从当前节点选取子孙节点 ## . 选取当前节点 ## .. 选取当前节点的父 ...
- JAVA通过XPath解析XML性能比较(原创)
(转载请标明原文地址) 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种 ...
- 利用XPath解析带有xmlns的XML文件
在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中 ...
- 爬虫系列二(数据清洗--->xpath解析数据)
一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...
- python开发遇到的坑(1)xpath解析ValueError: Unicode strings with encoding declaration are not supported
Traceback (most recent call last): File "/Users/*******.py", line 37, in <module> Bt ...
- xpath解析数据
xpath解析数据 """ xpath 也是一种用于解析xml文档数据的方式 xml path w3c xpath搜索用法 在 XPath 中,有七种类型的节点:元素.属 ...
随机推荐
- el-js中循环遍历el的集合
遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...
- url中传递中文参数时的转码与解码
URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString(“xxxxx”.getBytes("iso-8859-1"),"utf-8" ...
- Java计算计算活了多少天
Java计算计算活了多少天 思路: 1.输入你的出现日期: 2.利用日期转换,将字符串转换成date类型 3.然后将date时间换成毫秒时间 4.然后获取当前毫秒时间: 5.最后计算出来到这个时间多少 ...
- sqlite3调试
[sqlite3调试] 1.adb shell 激活模拟器shell. 2.cd /data/data/com.xxx.xxx/databases 进入app 数据库目录. 3.ls 查看有哪些数据库 ...
- Javascript Property Names
[Javascript Property Names] Property names must be strings. This means that non-string objects canno ...
- JMeter学习(十四)JMeter函数学习(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter函数是一些能够转化在测试树中取样器或者其他配置元件的域的特殊值.一个函数的调用就像这样:${_functio ...
- iOS8不能通过itms-services协议下载安装app
问题:iOS包通过itms-services协议下载app无反应 使用 itms-services://?action=download-manifest&url=[ipa下载链接] 下 ...
- 2018年全国多校算法寒假训练营练习比赛(第四场)F:Call to your teacher
传送门:https://www.nowcoder.net/acm/contest/76/F 题目描述 从实验室出来后,你忽然发现你居然把自己的电脑落在了实验室里,但是实验室的老师已经把大门锁上了.更糟 ...
- git add和git commit
git命令使用:提交前可指定要提交哪些文件,然后使用git commit来提交 样例: git status 输出: Changes to be committed: modified: app/ ...
- TZOJ 3659 神奇的探险之旅(有向无环每个点只能经过一次最长路dij)
描述 我们正在设计这样的一款儿童探险游戏:游戏由很多故事场景组成,每个场景中都有一个问题,游戏根据玩家的回答将进入下一场景,经过巧妙的设计,我们保证在一次“探险旅行”中,不会重复的进入任何相同的场景, ...