【爬虫-反爬虫】系列一:基础之模拟请求(2)

基础之模拟请求(2)

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


为了更快的做到这一点,需要对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格式等概念。以上答案都可以在互联网上搜索到。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值