Python网络爬虫实战(二)数据解析
上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题。那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据。
根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是HTML数据,也就是网页的源码,还有一些可能是Json数据,Json数据是一种轻量级的数据交换格式,相对来说容易解析,它的格式如下。
{"name": "中国","province": [{"name": "黑龙江","cities": {"city": ["哈尔滨", "大庆"]}}, {"name": "广东","cities": {"city": ["广州", "深圳", "珠海"]}}, {"name": "台湾","cities": {"city": ["台北", "高雄"]}}, {"name": "新疆","cities": {"city": ["乌鲁木齐"]}}]
}
上一篇说到的爬取携程加载不出来的那部分数据就是异步请求Json返回给我们的,对于这类数据,Python有着十分便捷的解析库,所以我们相对不用写多少代码。
但是对于爬取下来是一个HTML数据,其中标签结构可能十分复杂,而且不同HTML的结构可能存在差异,所以解析方式也需要看情况而定。
相对方便的解析方式有正则表达式,xPath和BeautifulSoup4库。
三者的运行速度相比当然是正则表达式最快,xPath其次,Bs4最慢了,因为Bs4是经过封装的库,相对于另外两个,无疑是重装坦克一般,但Bs4确实使用最简单的一个,而正则表达式是最麻烦的一个。
正则表达式几乎所有编程语言都支持,每一种语言的正则表达式都存在一点差异但大同小异。如果你是在设计一个复杂系统,就不要考虑正则表达式了,因为这种方法太过于不稳定,你永远不敢保证你写的正则规则是对应当前系统完全不会报错的。
xPath 是一门在XML文档中查找信息的语言。xPath可用来在XML文档中对元素和属性进行遍历。
关于正则表达式和xPath在之后的实战中再做详解,现在主要是掌握Bs4的使用。
对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,教你如何实现边学习边用Python赚钱的学习方式。点击加入我们的 python学习者聚集地
我们首先需要下载Bs4的库。
pip install lxml
pip install beautifulsoup4
当我们爬取下来一整个网页的HTML之后,Bs4就可以根据标签的相对定位来找准你要爬取的数据了。
这个相对定位类似于如下:
body > div.banner > div > div.celeInfo-right.clearfix > div.movie-stats-container > div > div > span > span
可以理解把HTML页面当做洋葱一层一层剥开。
这种定位叫做selector,我们可以不用自己编写它,比较HTML结构可能比较复杂,很容易写错。
我们可以打开浏览器的控制台(F12),然后Elements里面找到我们想要爬取之后解析的内容,这时候你鼠标放上去的位置对应页面内容会变成蓝色让你来对比,如下图。
可以发现,这些dd标签里面就是当前页面所有的电影信息了。哪吒之魔童降世你可以理解为dd-1,巨鳄风暴可以当做dd-2,以此类推。
然后你把鼠标放在dd标签上右键,会有一个copy选项,里面有一个selector,就是将它的selector复制下来。
下面分别是哪吒之魔童降世和巨鳄风暴的selector,可以发现,只有最后的dd:nth-child不同。
#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(1)#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(2)
有了这个规律,我们就可以很容易的一次性解析那种列表型网页了。
# -*- coding: utf-8 -*-
import os
import re
from bs4 import BeautifulSoup
import requests# 请求头设置
header = {'Accept': '*/*;','Connection': 'keep-alive','Accept-Language': 'zh-CN,zh;q=0.9','Accept-Encoding': 'gzip, deflate, br','Host': 'maoyan.com','Referer': 'http://maoyan.com/','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
}data = requests.get('https://maoyan.com/films', headers=header)
soup = BeautifulSoup(data.text, 'lxml')
titles = soup.select('#app > div > div.movies-panel > div.movies-list > dl > dd ')print(titles)
来仔细讲解一下上面这些代码。
request.get(url,headers)是昨天说过的了,headers就是请求头信息,里面包含了我们客户端的信息以及请求方式是Get还是Post等。
返回的data就是响应了,你可以直接print这个数据,但是这个响应体里面不止包含网页的HTML,还有这次请求的相关数据,比如响应码,200说明成功,404说明没有找到资源等。
data.text就是从响应体中拿到网页HTML代码了。
BeautifulSoup就是我们的主要解析对象,lxml是相应的解析方式。
通过调用BeautifulSoup的select选择器方法,来从之前传入的HTML中获取相应的标签。
这么一看其实Bs4还是很简单的,但这只是Bs4的基础应用了,对于我们普通解析一个网页已经足够用了,如果感兴趣可以去深入去了解一下,不过这个这么说也只是工具库,如果你不嫌麻烦可以自己解析。
看完代码,如果现在我要拿到这个页面的电影名称,这时候上面这个selector就不能用了,因为它不够精确,它只到了’
用这个selector。
#app > div > div.movies-panel > div.movies-list > dl > dd:nth-child(1) > div.channel-detail.movie-item-title > a
其它方式几乎都大同小异了。
以上是HTML的解析,我们爬取的数据有时还会是Json数据,这类数据相对来说十分规则,我倒是很希望目标数据会是Json格式。
比如上篇中的携程。
它的航班信息就是请求Json返回的。
Python中正则表达式的解析十分简单,你把它当做字典数据类型就可以了。
最开始你获得的Json是一串字符串,通过Python的Json.loads(jsonData)之后,返回的其实就是字典数据类型,直接操作就可以了。
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容import jsonjsonData = '{"name":"gzj","age":"23","sex":"man","mail":{"gmail":"antzuhl@gmail.com","qmail":"1325200@qq.com"}}'res = json.loads(jsonData)print(res['mail']['qmail'])
Python网络爬虫实战(二)数据解析相关推荐
- java爬取网页数据_Python网络爬虫实战(二)数据解析
Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...
- Python网络爬虫实战,数据解析!
上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题.那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据. 根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是 ...
- 数据爬取 mail_Python网络爬虫实战,数据解析!
上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题.那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据. 根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是 ...
- Python 网络爬虫实战:猫眼电影 38950 条评论数据告诉你《无名之辈》是否值得一看?
11月16日,一部无流量明星.无大制作.无大IP的"三无"国产电影<无名之辈>上映后,竟然连续打败了超级英雄"毒液".会魔法的"神奇动物& ...
- python基础实例 韦玮 pdf_韦玮:Python网络爬虫实战解析
2016年12月27日晚8点半,CSDN特邀IT专家.<Python系列实战教程>系列图书作者韦玮带来了主题为"Python网络爬虫反爬破解策略实战"的Chat交流.以 ...
- Python 网络爬虫实战:爬取知乎回答中的全部图片
平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...
- Python网络爬虫实战:近千条中秋节祝福语文案让你成为亲朋好友里最靓的仔
中秋节马上到了,不知道大家有没有像我这样的烦恼,每次过节,都要绞尽脑汁想好久,发什么样的祝福语才显得有诚意又有创意,什么样的朋友圈文案会有文化又有逼格. 去网上搜吧,搜出来的祝福语,画风大多是像这样的 ...
- python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...
WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...
- python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...
最新文章
- .net 连接mysql的字符串_asp.net连接数据库字符串
- poker java idea_JavaBasic学习笔记
- 通过FFMPEG代码学习函数指针和指针函数
- MYSQL AND OR的联用
- 飞鸽改变您的互联网生活
- [译]使用asp.net mvc 的工具提示
- python3的安装_python3快速安装
- LeetCode之翻转二叉树以匹配先序遍历
- ECharts项目小结~
- c#中使用BackgroundWorker
- exoplay切换全屏_ExoPlayer播放视频的简单使用及播放视频宽高设置的源码分析
- 第7章 航空公司客户价值分析
- 恢复威金病毒感染的EXE文件小方法(转)
- Sublime 中文命名乱码(显示为方框)
- Java加密、解密Word文档
- 系统分析设计——如何识别类
- Excel中如何使用COLUMN和COLUMNS函数
- Devfreq Bus Dcvs
- 微信小程序可以打开公众号文章
- c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt
热门文章
- win10适合安装哪个版本的office
- js m 数值缩写k_像请问英文版微博的数字后面的k和m分别代表什么意思?
- word文件有密码如何解开
- php+mysql等等的杂货
- OpenSSL中文手册之X509库详解(未完待续)
- c语言kdm算法,基于椭圆曲线的KDM安全公钥加密方案
- scratch小狗散步 电子学会图形化scratch编程等级考试一级真题编程题答案2019-5
- Springboot毕设项目消防安全知识普及平台9rv4qjava+VUE+Mybatis+Maven+Mysql+sprnig)
- (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
- 在vSphere上通过BOSH工具大规模部署Cloud Foundry (1) - IaaS准备