项目中遇到需要采集某个网站的数据,经过查看发现它用的是百度的站内搜索技术。站内搜索,采用的是ajax的技术,通过请求获取百度返回的json字符串,写入到页面中的。随后尝试了许多的方法,去采集他的数据,都是失败了。

 

于是,我就上百度去搜索了一下,都是一些泛泛之谈,没有实际的用处。最后,想想还是自己去研究吧。

在我不断的努力和找人咨询的情况下,终于,得到了下面的教程《火车头采集ajax数据 》。

 

第一步:分析

 

上面说了,百度的站内搜索返回的是json字符串,那么只要我们找到这个发送请求的地址,接收返回的值,对值进行处理就可以了。

 

第二步:获取请求的参数值

 

为了得到返回的json值,我们要找到提交的地址。在这里,可能有很多小伙伴想到了,火狐的firebug。我也尝试了,可是没有得到我想要的信息。

于是,我就在网上下载了一个抓包工具,Fiddler软件。百度软件库里就有。下载之后,打开软件,在浏览器搜索框中,输入你要搜索的内容。【回车】之后,你在fiddler里面查看,获取的数据。如下图:

 

火车头发布提取python的post数据 火车头采集ajax_java

 

第三步:分析抓包工具返回的数据。

 

火车头发布提取python的post数据 火车头采集ajax_ajax_02

 

1) 图中标记1的区域,是我们发现的百度站内搜索的地址。

2) 图中标记2的区域,是我们获取到的地址链接里面的所有参数。

3) 图中标记3的区域,是我们看到的百度站内搜索返回过来的json字符串。

那么,我们想要获取的三个元素,第一,地址有了;第二,参数有了;第三,返回的json数据也有了

有了这三个必要的条件,我们只要将,需要的参数组装成自己想要的参数链接,扔给百度,我们得到想要的值就好了嘛。

 

第四步:将获取的参数,组装成想要的请求网址。我这边是用php模仿get请求的方式。下面的代码的核心地方就是,我们要模拟一个referer值,相当于百度的令牌,你要是没有的话,百度是不会把数据返回给你的。

代码如下:

 

 

1. <?php
2.  
3. 下图中的参数,是根据实际中需要填写的,这里是最基础的代码,自行修改。
4.  
5. $ch = curl_init();
6. $timeout = 5;
7. curl_setopt ($ch, CURLOPT_URL, ‘http://www.shuchengxian.com/');
8. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
9. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
10. $file_contents = curl_exec($ch);
11. curl_close($ch); 
12. echo $file_contents;
13. ?>

 

火车头发布提取python的post数据 火车头采集ajax_ajax_03

 

如上图所示:重要的几个参数,都标记出来了。代码上传不了,很忧伤,只能发图。

q  --->  我们搜素的关键字

cc----> 我们要采集网站的网址

p-----> 分页的代码,从0开始的。

 

第五步:我们在浏览器段,执行我们的数据。

如图所示:

 

火车头发布提取python的post数据 火车头采集ajax_大数据_04

 

图中红色标记的地方,就是json字符串的字段名。现在我们值都可以获取到了,那么就把他放入火车头吧。

 

第六步:将文件放入火车头中采集。

如图:

 

火车头发布提取python的post数据 火车头采集ajax_java_05

 

这里的添加页数的变量,可以在程序的页面,将P后面的参数,改为变量,就可以了。

 

火车头发布提取python的post数据 火车头采集ajax_python_06

火车头发布提取python的post数据 火车头采集ajax_ajax_07

 

如上图所示,我们就拿到了,我们想要采集的数据网址,然后你可以将火车头数据库中的网址,全部的提取出来,组装成链接,就可以开始采集数据了。

 

终于写完了,火车采集ajax数据,采集百度站内搜索,就是这样的。