爬虫训练营-基础之模拟请求

此文已在本人个人微信公众号(iwoods100,不会下厨的健身爱好者不是一个好程序员)首发,关注可查阅全部文章。


在开发爬虫程序前,你应该知道你需要的数据来自哪儿,以及怎么获取。


为了更快的做到这一点,需要对http请求进行模拟进行验证。


以下是我常用的几种方式,基本上是足够用了。


以南方航空官网为例,假如我想爬南航的机票航班信息,那么我会先用浏览器调试一番。


浏览器调试


用火狐浏览器打开南航官网,先打开调试器【右击页面->查看元素】,再提交如下查询。




接下来会跳转到航班页面。



这个时候航班信息已经出来了,说明刚才肯定有某个请求是负责获取这些航班数据的,我们要找到这个请求。




通过查看所有请求的响应数据,很容易就能找到,这是一个名为query.ao的请求(还有另一个query.ao请求,它获取的是另一类数据)。




响应数据是一个JSON格式的字符串,在火狐中自动显示成对象,能方便展开。


看到这里,你就知道通过这个请求能够获取到对应的航班信息,接下来看看这个请求是什么样的。




这是一个POST类型的HTTP请求,通过【编辑和重发】按钮,你可以修改请求的POST参数再次发送给服务器,这里我们不做任何修改,再次发送同样的请求,你会发现返回的数据是一模一样的。


换句话说,这个请求在任何电脑上执行都会得到相同的结果,不信你可以试试。


浏览器的调试功能还有很多,也有很多插件辅助调试,比如我就习惯在chrome里使用【EditThis Cookie】插件,可以很全面的调试cookie,而且我也习惯在chrome里调试js代码,基本上是火狐和chrome切换着调试,有兴趣的可以多琢磨琢磨。


以上是通过浏览器来模拟请求,既方便也快捷,但如果执行一些非常灵活的调试会比较慢,如参数,cookie,请求头的更改。


Fiddler调试


如果嫌浏览器调试麻烦,我也会用Fiddler来调试。


Fiddler可以当做代理来用,尤其是通过它能捕获到来自手机app的http请求。


也可以直接使用Fiddler模拟请求发送,如下图所示,我把刚才的请求复制到Fiddler中进行模拟发送。




返回的数据如下图所示:




返回的航班数据是一样的,通过Fillder,可以比浏览器更方便的调试请求。


关于Fillder工具的使用方法在网上能找到,这里不再赘述。


以上介绍的是我常用的方式,你也可以使用其它工具来达到类似目的,如Wireshark。


python模拟


对于爬虫程序,最终目的就是在程序中实现数据请求,这样才能自动化批量获取数据。


这里展示一个最基础的网页数据请求,获取南航官网的html页面源码。




源代码如下:


#!/usr/bin/python
import urllib2

def getHtml(url):
page = urllib2.urlopen(url)
html = page.read()
return html

url  = "http://www.csair.com/cn/index.shtml"
print getHtml(url)

本节介绍的是最基础的使用方式,目的是为新手搭建一个基础观念以及解决思路。


关于http请求,很多细节需要读者自己摸索,比如http请求头各字段的含义?get请求与post请求的区别?以及urlencode编码与json格式等概念。以上答案都可以在互联网上搜索到。



不会下厨的健身爱好者

不是一个好程序员


长按二维码关注


你可能感兴趣的:(浏览器,python,爬虫,数据,调试)