抓取网页新闻(这篇下面这篇分析如何去POST请求网易的".dwr")

优采云 发布时间: 2022-02-12 03:24

  抓取网页新闻(这篇下面这篇分析如何去POST请求网易的".dwr")

  "

  BlogBeanNew.getBlogs.dwr”,下面的日志是分析如何POST请求网易的“.dwr”数据:

  【教程】以网易博文的最新读者信息为例,教大家如何抓取动态网页的内容。

  该日志用于分析获取网易博客读者信息。请求为:VisitBeanNew.getBlogReaders.dwr,获取博客内容的请求为:BlogBeanNew.getBlogs.dwr,都是通过POST请求,原理类似,设置基本相同。

  看完分析,就该看代码了。有兴趣的可以看下整个 BlogsToWordPress 工具的 Python 代码。如果您只想查看 POST 代码,可以查看此日志:

  【实录】用Python解析FeelingCard返回的DWR-REPLY数据,网易163博客心情随笔

  事实上,这篇文章相当复杂。如果您想阅读更简洁,可以阅读以下文章:

  [记录] 支持将网易心情文章导出到BlogsToWordPress

  我列出的三个日志基本解释了如何设置和请求 POST 来解析网易博客日志数据,它们是用 Python 编写的。以下是我参考后用Java实现的请求用户博客数据的完整代码。

  首先,网易博客的目录数据是动态加载的,需要对.dwr进行POST请求,但是博客内容是静态的,可以通过GET请求URL获取,比如小影的一篇博客:

  小英:明末文人为何发疯?

  地址是:

  我的目的是获取日志《小英:明末文人为何疯狂?》的内容。它只需要通过一个GET请求它的地址,然后地址相对格式化。例如,只要将最后解析的这串数字“29”拼接成一个完整的地址。整个地址格式为:

  [用户名]./blog/static/[blogId]

  小影博客的用户名:“xying1962”,可以通过入口地址“”获取。下面的blogId需要解析目录数据来获取,所以需要POST请求.dwr。

  另外,解释一下网易博客地址,有两种地址格式(具体到博客目录地址):

  1. [用户名]./blog/

  2. [用户名]/blog/

  在给出Java代码之前,不得不说谷歌的Chrome浏览器确实是一款不错的产品。它甚至可以很好地请求监控。是网页分析的好帮手。我个人认为它比 Wireshark 更容易使用。详情如下:

  1、在网页某处右击,在最后一项选择“Inspect Element”,好像中文叫“Inspect Element”,如图:

  

  “Inspect element”检查元素框出来后,点击“Network”,中文版应该是“Network”,刷新网页,可以看到网页的监控状态,如下图:

  

  可以查看HTTP请求的名称(name)、请求的方法(Method)、请求的状态(Status)、请求返回结果的类型(Type)。点击最左侧的名称查看详细信息,例如点击“blog/”,如下图:

  

  可以查看头部信息、返回结果“Response”和cookies。有时需要 cookie 来模拟登录以发出网页请求,但在许多情况下,标头和响应就足够了。如果想知道当前的信息,再检查一遍,点击底部的“清除”按钮(如图,红色圈出)就足够了。具体怎么用,如果你学过计算机网络,做过抓包分析,自己查一下就明白了。如果不是,那真的需要一段时间才能找到。

  下面讲解如何在Java中设置POST请求,首先按照类似于原创Python格式的Java代码

<p>public Set post163Blog(String username, String userId, int startIndex, int returnNumber){

/**

* entityBody用于保存字符串格式的返回结果

*/

String entityBody = null;

/**

* 实例化一个HttpPost,并设置请求dwr地址,username表示博主的用户名,例如肖鹰的username是“xying1962”

*/

HttpPost httppost = new HttpPost("http://api.blog.163.com/" + username + "/dwr/call/plaincall/BlogBeanNew.getBlogs.dwr");

/*

* 设置参数,除了c0-param0、c0-param1和c0-param2外都一样。

* c0-param0 :博主的userId,例如肖鹰的userId是“138445490”

* c0-param1 :返回博客数据的起始项,从0开始

* c0-param2 :一次返回博客的数量,最大值好像是500,具体多少我没有完全去试,600肯定不行,我一般设置500,600以上就不返回数据了。

* 如果一个博主写了超过500篇博客,那就可以分多次请求,只要合理设置c0-param1和c0-param2就可以。

*/

List nvp = new ArrayList();

nvp.add(new BasicNameValuePair("callCount", "1"));

nvp.add(new BasicNameValuePair("scriptSessionId", "${scriptSessionId}187"));

nvp.add(new BasicNameValuePair("c0-scriptName", "BlogBeanNew"));

nvp.add(new BasicNameValuePair("c0-methodName", "getBlogs"));

nvp.add(new BasicNameValuePair("c0-id", "0"));

nvp.add(new BasicNameValuePair("c0-param0", "number:" + userId));

nvp.add(new BasicNameValuePair("c0-param1", "number:" + startIndex));

nvp.add(new BasicNameValuePair("c0-param2", "number:" + (returnNumber

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线