背景
前面已经通过:
介绍了,关于抓取动态网页中的内容的逻辑过程。
下面通过具体的例子,来说明是如何实现此过程的。
前提知识
1.了解网页抓取等的基本背景知识
不了解的去参考:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
2.了解抓取动态网页中的内容的背后的逻辑
如前所述,不了解的自己去看:
3.已经会使用工具去分析网页执行过程
不了解的先去参考:
【总结】浏览器中的开发人员工具(IE9的F12和Chrome的Ctrl+Shift+I)-网页分析的利器
知道IE9的F12大概是啥,然后再参考:
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
去知道如何使用IE9的F12.
明确此处的需求:想要获得对应的某个网易帖子中的最近读者的相关信息
先说明一下我们此处举的例子的是啥。
此处,假设,我们希望获得的是,我之前的某个网易博客的某个帖子:
http://green-waste.blog.163.com/blog/static/3267767820096221127554/
中的“最近读者”,都有哪些。
截图如下:
我们想要抓取其中的,最近读者,都有哪些,至少包括有几个人,每个人的名字是啥等等这些内容;
而这些内容,对应的,就是我们所说的动态内容中的一种,即,在网页源码中找不到。
比如第三个读者是longlong,在网页html代码中,找不到这个值:
而我们接下来的主要的目的就是,至少,先要分析出这些数据,都是从哪里来的。
或者说,至少先找到这些数据,在哪里。
通过工具分析网易博客帖子中的最近读者信息这个数据是从哪里来的
接下来,才是演示如何用IE9的F12,去分析此查找所需数据的过程。
比如上面举例提到的longlong,我们先要找到,这个值,在哪里。
查找动态数据longlong在哪里
打开IE9,打开任意网页,然后再按F12,即可打开“F12 Developer Tools”,
切换到Network标签,然后点击Start Capturing,其变成了Stop Capturing,说明现在已经启动抓取过程了。
然后输入地址:
http://green-waste.blog.163.com/blog/static/3267767820096221127554/
然后等网页加载完毕,就可以看到抓取出来的全部过程了:
对应的,把页面拉到底部,先看看我们要提取的数据longlong:
对应的,我们可以再去验证一下,此数据,是动态加载的,是本身html中没有的:
而对于想要找longlong,我们很自然就想到,在F12中去搜索:
就可以搜到对应的数据了:
其中,也很明显的可以看到,对应的longlong所出现的html中,其旁边也有对应的其他读者的信息,分别对应着各个读者:
此时,很明显的,我们已经找到,我们所需要的,最近读者的相关读者信息了。
其中,可以看到,此处对应的url地址是:
http://api.blog.163.com/green-waste/dwr/call/plaincall/VisitBeanNew.getBlogReaders.dwr
其就属于我们在:
所说的,对应的动态数据,是从访问另外一个url中所返回的内容中,所包含的。
此处,很明显,要得到对应的我们要的数据,接下来,就要搞懂,如何去访问对应的url:
http://api.blog.163.com/green-waste/dwr/call/plaincall/VisitBeanNew.getBlogReaders.dwr
然后才能得到我们所需要返回的信息,然后从中提取出来我们要的读者的信息。
不过,此时,我们已经可以总结出来相关的,最终获得所需内容的,最后一步的过程了:
已得到的东西 |
要如何处理 |
从 http://api.blog.163.com/green-waste/dwr/call/plaincall/VisitBeanNew.getBlogReaders.dwr 所返回的内容 | 提取我们要的longlong等读者信息 |
访问对应的getBlogReaders的url(以获得所的返回的内容)
接下来,很明显,就是要去看看,如何访问:
http://api.blog.163.com/green-waste/dwr/call/plaincall/VisitBeanNew.getBlogReaders.dwr
去获得所返回的内容。
然后我们可以通过点击对应所抓取的各项内容,从中找到,是如何访问此url,如何获得对应的返回内容的。
其中,此处如:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
所介绍的,对应的,需要关注的部分是:
Request Headers中看到对应的是POST方法:
对应地址是:
http://api.blog.163.com/green-waste/dwr/call/plaincall/VisitBeanNew.getBlogReaders.dwr
对应的Headers是:
Key Value |
同时,对应着Request Body,也是非空,有对应要提交的post data的:
其中,把对应数据,先列出来:
callCount=1 |
其中,另外,在访问此url之前,前面Request Headers中,也看到了,是有对应的cookie的,
此处,单独的Cookie一项中,也可以看到对应的详细的值:
对应的cookie的值,此处也列出来:
Direction Key Value Expires Domain Path Secure HTTP only |
其中,关于如何具体分析,这么多Headers和这么多Post data参数,如何处理,如何取舍,可参考:
【整理】网页抓取,模拟登陆,抓取动态网页内容等过程中,所涉及的Headers信息,Cookie信息,POST数据的处理逻辑
然后,等都搞懂了,如何取舍对应的headers,cookies,post data,然后就可以,根据需要,
针对需要处理的参数,去找到其值是如何得到的。
把所有的变量的值,都清楚怎么得到的。
最后,就是整理出整个流程了。
整理完毕流程,才是去用不同的代码,比如C#,Python等,去实现对应的流程。
【待续。。。】
【后记 2013-09-22】
1.后来,早就写好了教程了给出代码了: