什么是Python爬虫?
如何学会使用Python爬虫?
如何利用Python爬虫事半功倍的处理数据?
...
看这一篇文章就够了!
第一节:python爬虫分类和robots协议
爬虫一直是跟大数据关系比较密切的,大数据就是对海量数据处理的一些方式,包含对海量数据如何采集。以前对于数据的采集是通过日志的方式来进行。而在现在的移动互联时代,面对大量数据,我们如何去拿到我们想要的内容。灵感就来自于爬虫。爬虫在我们身边一直存在,搜索引擎本身就属于爬虫。最早的搜索引擎就是数据库关系建立的,随着数据规模越来越大,发现仅依靠数据库是不行的,搜索引擎诞生之后,发现数据太多了,而且为了迎合大众,必须去不断的收集这些信息。而实际上,最早遇到大数据难题的就是搜索引擎(雅虎、谷歌、百度等)。搜索引擎为了大量的自动化的去采集数据,所以编写了爬虫。
爬虫,应该称为网络爬虫,也叫网页蜘蛛、网络机器人、网络蚂蚁等。
爬取一般流程
1、初始一批URL, 将这些URL放到待爬取队列
2、从队列取出这些URL, 通过DNS解析IP, 对IP对应的站点下载HTML页面, 保存到本地服务器中, 爬取完的URL放到已爬取队列。
3、分析这些网页内容, 找出网页里面的其他关心的URL链接, 继续执行第2步, 直到爬取条件结束。>>点击链接查看更多有关爬虫和Robots协议的内容
第二节:python爬虫urllib使用和进阶
上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了。
其实爬虫就是浏览器,只不过它是一个特殊的浏览器。爬取网页就是通过HTTP协议访问相应的网页,不过通过浏览器访问往往是人的行为,把这种行为变成使用程序来访问就是爬虫的过程。
有的网站会设置反爬虫策略来拒绝爬虫对网站内容的爬取要求。此时我们要爬取这种网站的话,是要对程序进行包装的,尽量去模拟人的行为来获取网站内容。
urllib包
urllib是Python提供的一个工具包,用来处理url和相应的一些内容的。
Python 2中提供了urllib和urllib 2。urllib提供较为底层的接口, urllib2对urllib进行了进一步封装。
Python 3中将urllib合并到了urllib 2中, 并只提供了标准库urllib包。我们重点使用的是Python3,但是它们的接口都是相同的,掌握了就可以在任何场景使用。>>点击链接查看有关urllib使用和进阶的更多内容
第三节:python爬虫URL编码和GETPOST请求
本节课就要开始上手代码了,注意认真听讲哦~
urllib.parse模块
该模块可以完成对url的编解码。
先看一段代码:
此时查看结果,程序显示TypeError错误,urlencode函数第一参数要求是一个字典或者二元组序列。
接下来将对代码一点点进行修改,逐步达到请求。
一般来说url中的地址部分, 一般不需要使用中文路径, 但是参数部分, 不管GET还是POST方法, 提交的数据中,可能有斜杆、等号、问号等符号,这样这些字符表示数据,不表示元字符。如果直接发给服务器端,就会导致接收方无法判断谁是元字符, 谁是数据了。为了安全, 一般会将数据部分的字符做url编码, 这样就不会有歧义了。后来可以传送中文, 同样会做编码, 一般先按照字符集的encoding要求转换成字节序列, 每一个字节对应的十六进制字符串前加上百分号即可。
提交方法method
最常用的HTTP交互数据的方法是GET、POST。
GET方法, 数据是通过URL传递的, 也就是说数据是在HTTP报文的header部分。
POST方法, 数据是放在HTTP报文的body部分提交的。
数据都是键值对形式, 多个参数之间使用&符号连接。例如a=1&b=abc。
我们将data提交上去,就是发送post请求,如果对方的网站有响应,会返回数据,返回的数据是正好是json,所以对其用simplejson进行转换。我们需要根据网站返回的结果,去选择合适的方法处理转换数据。>>点击链接了解GET、POST方法的更多内容
第四节:python爬虫AJAX数据爬取和HTTPS访问
我们首先需要对之前所接触的爬虫的概念,爬取流程、爬虫标准库等内容做一个回顾。
通常我们在大多数情况下编写的爬虫都为聚焦爬虫。
本节课我们通过爬取“豆瓣电影”的”最近热门电影”的“热门”手把手教你处理JSON数据。
监察页面源代码,可以看到很多内容,只针对热门电影这一部分进行分析。
然后复制地址进行操作分析。通过分析, 我们知道这部分内容, 是通过AJAX从后台拿到的Json数据。
访问的URL是https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
,其中%E7%83%AD%E9%97%A8
是utf-8编码的中文“热门”。
接下来对这里面的内容进行分析:
最终得到这么一个结果!
因为每个企业处理的方式可能会不太一样,返回的数据有可能是html,也有可能是JSON。所以说处理的方式必须一致,或者把函数封装在一个方法中才是我们需要思考的重点。往往我们会为一些特定数据、特定网站写一个特定的爬虫。因为,每一个网站的分析和提取方式可能是不一样的。现在我们只是简单做了一个JSON的处理。但如果是网页解析,则是会非常麻烦的,尤其是网页一旦更换网页模板,我们则需要重新去写网页的解析方式。
HTTPS证书忽略
HTTPS使用SSL安全套接层协议, 在传输层对网络数据进行加密。HTTPS使用的时候需要证书, 而证书需要CA认证。CA(Certificate Authority) 是数字证书认证中心的简称, 是指发放、管理、废除数字证书的机构。
CA是受信任的第三方,有CA签发的证书具有可信性。如果用户由于信任了CA签发的证书导致的损失,可以追究CA的法律责任。
CA是层级结构,下级CA信任上级CA,且有上级CA颁发给下级CA证书并认证。
一些网站, 例如淘宝, 使用HTTPS加密数据更加安全。
通过HTTPS访问12306的时候, 失败的原因在于12306的证书未通过CA认证, 它是自己生成的证书, 不可信。而其它网站访问,如https://www.baidu.com/ 并没有提示的原因,它的证书的发行者受信任,且早就存储在当前系统中。
能否像浏览器一样,忽略证书不安全信息呢?>>点击链接查看如何操作
第五节:Python实现urllib3和requests库使用
urllib3库
标准库urllib缺少了一些关键的功能, 非标准库的第三方库urllib3提供了, 比如说连接池管理。
这个封装的属性和方法还是比较原始的,我们对于这样的使用肯定是不行的,那我们需要用什么呢?接着来讲requests库。
requests库
requests使用了urllib3, 但是API更加友好, 推荐使用。>>点击链接查看源码实战
第六节:python爬虫实战实现XPath和lxml
本节介绍了用XPath类似于路径的设计遍历或者查询其中的某些元素或者元素的属性。
HTML解析
通过上面的库, 都可以拿到HTML内容。HTML的内容返回给浏览器, 浏览器就会解析它, 并对它渲染。
HTML超文本表示语言, 设计的初衷就是为了超越普通文本, 让文本表现力更强。
XML扩展标记语言, 不是为了代替HTML, 而是觉得HTML的设计中包含了过多的格式, 承担了一部分数据之外的任务, 所以才设计了XML只用来描述数据。
HTML和XML都有结构, 使用标记形成树型的嵌套结构。DOM(Document Object Model) 来解析这种嵌套树型结构, 浏览器往往都提供了对DOM操作的API, 可以用面向对象的方式来操作DOM。
XPath
XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。
XPath 术语
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。>>查看更多
获取更多Python内容请订阅Python学习站官方技术圈!