好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python如何获取javascript动态产生的数据?

我现有有一个工作,需要从新浪新闻网站中获取数据,包括,标题,正文,和参与人数。

如图所示想得到 820,但是动态产生的。该新闻的url为 陕西眉县发红头文件:官员卖水泥买房纳入考核

我有话说

这段代码产生的参与人数820,使用什么工具来获取?我想使用简单点的,可以完成上述工作的代码或 模块?谢谢大家

回复内容: 楼上给的没错。
像这种情况一般是异步请求json或者jsonp,直接监控network就行了:
以chrome浏览器为例。
1.右键页面-审查元素-Network,切换到network面板,刷新页面。
然后浏览器和web后端的通信会被记录下来。

排除掉图片,css等。
要获取当前新闻的评论数,浏览器发送给服务器的请求里面一定会有一个和当前新闻id有关的参数 ,(当然理论上也有通过referer来实现id传递的,但是毕竟太奇葩,不予考虑)。
所以
1. 如果method为GET,在Name里面一定有一个特殊的字符串,用来标识要请求的是哪个新闻的评论。
2. 或者method为POST,那么在POST的参数里面会有一个能标识当前新闻的参数:
这是微信公众平台获取聊天信息的action,fromfakeid就是聊天对方的id。 这是微信公众平台获取聊天信息的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

  import   selenium 
 from   selenium   import   webdriver 
 from   selenium.common.exceptions   import   NoSuchElementException 
 from   selenium.webdriver.common.keys   import   Keys 
 import   time 

 browser   =   webdriver  .  Firefox  ()   # Get local session of firefox 
 browser  .  get  (  "http://news.sina.com.cn/c/2013-07-11/175827642839.shtml "  )   # Load page 
 time  .  sleep  (  5  )   # Let the page load 
 try  : 
     element   =   browser  .  find_element_by_xpath  (  "//span[contains(@class,'f_red')]"  )   # get element on page 
     print   element  .  text   # get element text 
 except   NoSuchElementException  : 
     assert   0  ,   "can't find f_red" 
 browser  .  close  () 
  

  >>> from selenium import webdriver 
 >>> c = webdriver.Chrome() 
 >>> c.get('http://news.sina.com.cn/c/2013-07-11/175827642839.shtml') 
 >>> comment = c.find_element_by_id('media_comment') 
 >>> count = comment.find_element_by_class_name('f_red') 
 >>> count.text 
 u'823' 
  
我曾今使用python类库webkitgtk来解析网页,抽取html结构,获取数据,不过webkitgtk安装和使用过程略蛋疼,而且需要安装特定的版本,才可以操作获取数据。 您好,我看了您的硕士毕业论文,我也对这个论文推荐这个主题很感兴趣,但是我没能看懂您在LDA基础上改进的TV-IDF这个算法,利用4-2公式算不出您在4-3表中的TV-IPF的值,您能解释或者把具体的计算过程给我看一下吗?谢谢 使用 ghost.py 模块,模拟浏览器打开网页,获取的网页就是动态生成的。

查看更多关于python如何获取javascript动态产生的数据?的详细内容...

  阅读:45次

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网
[ SiteMap ]