导读:
最近周边朋友学python的越来越多,毫无意外的是,大家都选择了爬虫入门。这不难理解。Python有丰富的库使用,使得爬虫的实现容易很多,学习之后,回报明显,容易获得成就感。总结起来就是:让人有继续学下去的欲望。我偏巧例外,先走了Python web。虽然起了个大早,赶了个晚集,但不妨趁清明假期,计划之外,时间有余,做一回“愿闻其详”的门外汉。
探一探爬虫的入门知识,这里将通过爬取某贴吧的图片为案例介绍一下简单的爬虫需要掌握哪些知识,以及实现的流程。因本人能力有限,若有纰漏处,望各友予以指正,必改。
实验前准备:
1. 知识点:
urllib: urlencode()
urllib2: HTTPHandler(), ProxyHandler(), build_opener(), Request()
lxml: etree, xpath
2. 推荐工具:
Fiddler4
xpath helper
3. 实现环境:
Ubuntu, python2.7
正文:
1. 什么是爬虫
事实上网上有很多对爬虫高深的解释,让人看了云里雾里,我觉得对于初学者,可以一言概之:获取服务器的响应数据,并从中分离出自己需要的部分。
当然,不得不说这样解释很不严谨。可学一门新知识的时候,最重要的是,知道自己在学什么,至少心中对其有个大致的形象,而不是依稀的模糊的知识。所以入门可以尽可能的简单理解,往后需要深究的时候再回头看,必有大悟。
2. 如何获取服务器响应数据
既然爬虫需要获取服务器的响应内容,那么第二步就是如何获取服务器数据。
事实上,当我们用浏览器打开百度的时候,浏览器就已经在你不知道的情况下,先你的目标服务器(也就是百度的服务器)发送了请求报文(Request Header),如图:
服务器通过对请求报文的解析,相应的,会返还你一个响应报文(Response Headers),如图:
同时会在响应报文中,附带整个网页的代码,如图:
详情可以查阅相关HTTP协议。
所以我们想要获得服务器响应的数据,就得尽可能使自己的代码运行时,像是寻常的浏览器。而服务器判别的标准,就是从请求报文里开始的(并非唯一方法)。
python的库很强大,所以实现请求报文的构造,发送,同时获得响应内容很简单:
import urllib2
# 目的,也就是网址
url = "https://www.baidu.com/"
# 构建一个http对象
http = urllib2.HTTPHandler()
# 构建一个请求的发送器
opener = urllib2.build_ope