为什么80%的码农都做不了架构师?>>>
这段时间在做爬虫,需要对目标网站抓包查看其源数据,然后模拟提交去获取数据,主要分为抓包和模拟两步:
一、抓包
- 方法一:chrome自带的调试工具,切换到network即可查看到
- 方法二:Fiddler抓包:适用与不支持chrome的网站,但只支持windows
- 方法三:Paw,但该软件收费,request好像没有xml的选项
- 方法四(建议采用该方法):postman+chrome的插件:先下载postman,然后用google账户登录后,打开右上方的按钮
点击之后会提示安装chrome扩展,扩展安装好了之后,需要在chrome中开启扩展,并打开Postman
然后chrome中正常访问提交,postman的左侧会有访问记录,选中关键性的访问记录,然后点击右边的 Send按钮即可看到模拟结果 - 方法五:经过方法四之后,电脑会自动安装一个postman的原生app,可以直接使用,无需结合chrome,使用方法和方法四一致:
二、模拟提交
用第一步的方法三已经实现了模拟,用的是postman复制chrome状态,如果网站不支持chrome访问,可以用Fiddler抓包或ie最新版本(和chrome一样支持抓包),然后在postman中手动模拟即可
模拟出来之后就可以愉快在爬虫程序中设置header,post数据提交获取源数据了!
后续:post数据编码问题:可以先在chrome中访问一下目标网页,可以得到header头:Accept-Charset gb2312 这样的类型,可以手动修改
附php远程提交xml数据代码:
$url = "http://localhost/response.php";
$data = '
$header[] = "Content-type: text/xml";//定义content-type为xml
curl_setopt($ch, CURLOPT_URL, $url); //定义表单提交地址
curl_setopt($ch, CURLOPT_POST, 1); //定义提交类型 1:POST ;0:GET
curl_setopt($ch, CURLOPT_HEADER, 1); //定义是否显示状态头 1:显示 ; 0:不显示
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//定义请求类型
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//定义是否直接输出返回流
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //定义提交的数据,这里是XML文件
$result = curl_exec($ch);
curl_close($ch);//关闭//远程端接收xml数据代码
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
补充:当你写爬虫抓不到APP请求包的时候该怎么办?