python如何获取javascript动态产生的数据
2015-11-20 16:38
786 查看
我现有有一个工作,需要从新浪新闻网站中获取数据,包括,标题,正文,和参与人数。
如图所示想得到
820,但是动态产生的。该新闻的url为http://news.sina.com.cn/c/2013-07-11/175827642839.shtml 陕西眉县发红头文件:官员卖水泥买房纳入考核
<a id="media_comment" href="#J_Comment_Wrap" rel="我有话说" class="J_Comment_Count_Txt" style="display:none;" action-type="anchorGo" action-data="y=-50"
data-sudaclick="media_comment">我有话说</a>
这段代码产生的参与人数820,使用什么工具来获取?
像这种情况一般是异步请求json或者jsonp,直接监控network就行了:以chrome浏览器为例。
1.右键页面-审查元素-Network,切换到network面板,刷新页面。然后浏览器和web后端的通信会被记录下来。
排除掉图片,css等。
要获取当前新闻的评论数,浏览器发送给服务器的请求里面一定会有一个和当前新闻id有关的参数,(当然理论上也有通过referer来实现id传递的,但是毕竟太奇葩,不予考虑)。
所以
1. 如果method为GET,在Name里面一定有一个特殊的字符串,用来标识要请求的是哪个新闻的评论。
2. 或者method为POST,那么在POST的参数里面会有一个能标识当前新闻的参数:
这是微信公众平台获取聊天信息的action,fromfakeid就是聊天对方的id。
如果要用POST方法获取某个新闻的评论数,在这里也会有一个参数用来标识出这个新闻。(比如“175827642839”)。
然后一个个排查,图片css均不考虑,那么很容易就能找到
http://comment5.news.sina.com.cn/page/info?format=js&channel=gn&newsid=1-1-27642839&group=0&compress=1&ie=gbk&oe=gbk&page=1&page_size=100&jsvar=requestId_19606520
可以精简为http://comment5.news.sina.com.cn/page/info?format=js&channel=gn&newsid=1-1-27642839
其中的newsid参数1-1-27642839和175827642839关系很明显了。
这是一个js,里面有一句:"count": {"qreply": 706, "total": 823, "show": 95},你要找的就在这里。
可以直接从字符串里面截取到total,或者去掉js头部的“var data =”。得到一个json字符串,解析成对象也能获取total 。
在新闻页面的源码里面找“1-1-27642839” 可以找到“newsid:'1-1-27642839',”
分析过程基本结束。
然后,你可以:
1.分析新闻页代码,得到newsid
2.请求http://comment5.news.sina.com.cn/page/info?format=js&newsid=“newsid”
3.解析获取到的js,从js中得到新闻评论数。
如图所示想得到
820,但是动态产生的。该新闻的url为http://news.sina.com.cn/c/2013-07-11/175827642839.shtml 陕西眉县发红头文件:官员卖水泥买房纳入考核
<a id="media_comment" href="#J_Comment_Wrap" rel="我有话说" class="J_Comment_Count_Txt" style="display:none;" action-type="anchorGo" action-data="y=-50"
data-sudaclick="media_comment">我有话说</a>
这段代码产生的参与人数820,使用什么工具来获取?
像这种情况一般是异步请求json或者jsonp,直接监控network就行了:以chrome浏览器为例。
1.右键页面-审查元素-Network,切换到network面板,刷新页面。然后浏览器和web后端的通信会被记录下来。
排除掉图片,css等。
要获取当前新闻的评论数,浏览器发送给服务器的请求里面一定会有一个和当前新闻id有关的参数,(当然理论上也有通过referer来实现id传递的,但是毕竟太奇葩,不予考虑)。
所以
1. 如果method为GET,在Name里面一定有一个特殊的字符串,用来标识要请求的是哪个新闻的评论。
2. 或者method为POST,那么在POST的参数里面会有一个能标识当前新闻的参数:
这是微信公众平台获取聊天信息的action,fromfakeid就是聊天对方的id。
如果要用POST方法获取某个新闻的评论数,在这里也会有一个参数用来标识出这个新闻。(比如“175827642839”)。
然后一个个排查,图片css均不考虑,那么很容易就能找到
http://comment5.news.sina.com.cn/page/info?format=js&channel=gn&newsid=1-1-27642839&group=0&compress=1&ie=gbk&oe=gbk&page=1&page_size=100&jsvar=requestId_19606520
可以精简为http://comment5.news.sina.com.cn/page/info?format=js&channel=gn&newsid=1-1-27642839
其中的newsid参数1-1-27642839和175827642839关系很明显了。
这是一个js,里面有一句:"count": {"qreply": 706, "total": 823, "show": 95},你要找的就在这里。
可以直接从字符串里面截取到total,或者去掉js头部的“var data =”。得到一个json字符串,解析成对象也能获取total 。
在新闻页面的源码里面找“1-1-27642839” 可以找到“newsid:'1-1-27642839',”
分析过程基本结束。
然后,你可以:
1.分析新闻页代码,得到newsid
2.请求http://comment5.news.sina.com.cn/page/info?format=js&newsid=“newsid”
3.解析获取到的js,从js中得到新闻评论数。
相关文章推荐
- fastjson使用心得
- javascript 取得rem 对应的值
- js封装方法用于格式化时间
- 浅谈基于JavaScript的DDOS攻击
- 深入详解javascript之delete操作符
- JavaScript获取数组最大值和最小值
- js 搜索引擎
- 推荐12个最好的 JavaScript 图形绘制库
- js调试技巧
- 2、手把手教你Extjs5(二)项目中文件的加载过程
- JSON.parse()和JSON.stringify()
- JS 把数字转换成字母
- jsoup 简介
- ABAP内表数据和JSON格式互转
- js参数传值太多
- Angular.js入门笔记(1)
- js中封装方法用于截取字符
- 解决Jsp报错:Multiple annotations found at this line
- 对js运算符“||”和“&&”的总结
- EXTJS 动态添加Checkbox