Python爬虫(入门+进阶)学习笔记 1-4 使用Xpath解析豆瓣短评
2018-03-27 17:26
1331 查看
本节课程主要介绍解析神器Xpath是什么、Xpath如何安装及使用,以及使用实际的例子讲解Xpath如何解析豆瓣短评的网页并获取数据。解析神器Xpath
Xpath的使用
实战环节
通过网页解析,得到想要的数据或者新的链接
网页解析可以通过Xpath或者其它解析工具进行,Xpath在是一个非常好用的网页解析工具
3. 常用的网页解析
正则表达式使用比较困难,学习成本较高
BeautifulSoup性能较慢,相对于Xpath较难,在某些特定场景下有用
Xpath使用简单,速度快(Xpath是lxml里面的一种),是抓取数据最好的选择
4. Xpath的安装 pip install lxml
解析数据,返回xml结构
使用.xpath()寻找和定位数据
from lxml import etree
html ='''#省略'''#html数据,使用requests获取
s = etree.HTML(html)#解析html数据
print(s.xpath())#使用.xpath()
2. 获取Xpath的方法
第一种方法:从浏览器直接复制
首先在浏览器上定位到需要爬取的数据
右键,点击“检查”,在“Elements”下找到定位到所需数据
右键——Copy——Copy Xpath,即可完成Xpath的复制
示例:
#从浏览器直接复制Xpath
import requests
from lxml import etree
url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text
s = 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 etree
url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text
s = etree.HTML(r)
print(s.xpath('//div[@class="comment"]/p/text()')[0])
对比从浏览器复制Xpath的方法跟手写Xpath的方法的不同点已经两种方法各自的应用场景
通过对比可以发现从浏览器复制的Xpath中,“li[]”括号中的数字代表对应的第几条评论,直接删除括号,即可获取全部短评
对于结构清晰的html网页,可以直接手写Xpath,更加简洁且高效
对于结构复杂的html网页,可以通过浏览器复制的方式获取Xpath
课后练习:爬取小猪短租(深圳)页面的数据
首先使用浏览器打开小猪短租(深圳) 的页面,通过阻止JavaScript加载的方法确定网页的加载方式
可以发现,阻止JavaScript加载之后页面还是可以显示短租的标题、价格等数据
接下来便可以爬取这一部分可显示的数据,在此例子中,我们主要爬取单个页面中每条短租信息的标题、价格和经纬度
课后练习:虎扑
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 time
url3 = '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的使用方法
阅读Python爬虫利器三之Xpath语法与lxml库的用法,了解更多Xpath的使用方法示例
正则表达式阅读Python正则表达式,了解正则表达式及其基本的语法
阅读爬虫入门到精通-网页的解析(正则),学习使用正则表达式匹配网页数据
BeautifulSoup阅读Beautiful Soup 中文教程,了解使用BeautifulSoup解析网页的方法
阅读Beautiful Soup 4.2.0 文档这篇BeautifulSoup的官方文档,了解其更加全面的用法
Xpath的使用
实战环节
解析神器Xpath:
1. 什么是XpathXPath即为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 etree
html ='''#省略'''#html数据,使用requests获取
s = etree.HTML(html)#解析html数据
print(s.xpath())#使用.xpath()
2. 获取Xpath的方法
第一种方法:从浏览器直接复制
首先在浏览器上定位到需要爬取的数据
右键,点击“检查”,在“Elements”下找到定位到所需数据
右键——Copy——Copy Xpath,即可完成Xpath的复制
示例:
#从浏览器直接复制Xpath
import requests
from lxml import etree
url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text
s = 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 etree
url = 'https://book.douban.com/subject/1084336/comments/'
r = requests.get(url).text
s = 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 time
url3 = '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-3 使用Requests爬取豆瓣短评
- Python爬虫(入门+进阶)学习笔记 1-5 使用pandas保存豆瓣短评数据
- Python爬虫(入门+进阶)学习笔记 1-8 使用自动化神器Selenium爬取动态网页(案例三:爬取淘宝商品)
- Python爬虫(入门+进阶)学习笔记 1-7 数据入库之MongoDB(案例二:爬取拉勾)
- 【学习笔记】Python爬虫-豆瓣电影所有短评
- Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎)
- 爬虫笔记-使用python爬取豆瓣短评
- Python爬虫(入门+进阶)学习笔记 1-2 初识Python爬虫
- Python爬虫(入门+进阶)学习笔记 1-1 什么是爬虫?
- Python 学习笔记3 - 定向爬虫入门
- python2.7爬虫学习笔记(一)---Urllib库的使用
- Python爬虫框架Scrapy 学习笔记 5 ------- 使用pipelines过滤敏感词
- [Python入门及进阶笔记00]-写在前面(目录/书籍/学习路线/其他)
- 类的使用与未知对象的解析--python笔记--廖雪峰站学习笔记(三)
- Python爬虫入门笔记:urllib库的使用
- python爬虫学习笔记——使用requests库编写爬虫(1)
- python爬虫入门笔记:用scrapy爬豆瓣
- python爬虫入门笔记:用scrapy爬豆瓣
- python小白入门学习笔记-爬虫入门
- Python爬虫入门笔记:urllib库的使用2