我是靠谱客的博主 寂寞大碗,最近开发中收集的这篇文章主要介绍python 如何动态获取javascript_python如何获取javascript动态产生的数据?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

回复内容:

楼上给的没错。

像这种情况一般是异步请求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

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 模块,模拟浏览器打开网页,获取的网页就是动态生成的。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

立即提交

专题推荐独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

最后

以上就是寂寞大碗为你收集整理的python 如何动态获取javascript_python如何获取javascript动态产生的数据?的全部内容,希望文章能够帮你解决python 如何动态获取javascript_python如何获取javascript动态产生的数据?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部