Jerkwin分享 http://blog.sciencenet.cn/u/Jerkwin

博文

动态网页数据的简单获取方法

已有 6237 次阅读 2014-12-17 11:39 |个人分类:我的工具箱|系统分类:科研笔记

2014-12-16 21:31:17

网页数据的获取分为两步

  1. 获取网页文件

  2. 分析文件, 获取数据

HTML静态网页数据的获取很简单, 直接对HTML文件进行分析即可. 利用Ajax等技术动态加载生成的网页数据获取起来就麻烦些, 通用的方法很复杂. 但对于简单的需求, 也可以有简单的方法. Ajax动态加载数据时, 也必须利用http请求获知数据(这些数据的传送方式可能有多种, 但常见的是json格式), 只要获知了这个http请求, 我们一样可以获知这些数据, 直接进行分析. 所以, 关键就是得到http数据请求的地址. 这可以利用浏览器自带的开发者工具实现, 高版本的IE, 火狐的FireBug, 谷歌的Chrome都自带了这样的工具.

下面我们以获取集思录的股票分级基金为例说明. 使用Chrome浏览器打开网页, 可以看到数据是可以随时刷新的, 右键查看页面源代码, 可以看到页面HTML源代码中根本没有这些数据, 这说明这些数据都是动态生成的. 按F12打开Chrome的开发者工具, 定位到网络标签, 再刷新下页面, 就可以看到页面载入时异步加载了许多请求. 但具体数据在哪个请求中, 对不同的网站没用统一的规定. 对我们示例的这个网站, 仔细分析下各个请求就会发现数据请求是像?___t=1418659504578这样的. 我们右键打开这样的链接, 可以看到传送回来的数据. 所以, 只要利用相似的链接地址, 我们就可以获得数据了.

分析一下数据请求地址的特点就会发现, ?___t=后面的数字代表的是精确到毫秒的UNIX时间戳. 知道了这一点我们就可以自己生成请求地址并获取数据了.

查看获取的数据, 发现是json格式的, 这样的数据格式利用JavaScript进行处理很方便.

下面是获取数据的Bash脚本, 先利用curl得到数据, 然后进行了简单的处理.

# Language: bashTime=$(date +%s)curl "http://www.jisilu.cn/data/sfnew/funda_list/?___t="$Time"000" \| sed 's/"id":/\n/g; s/[,}{"]/ /g; s/"cell":{/ /g'

AutoHotKey的脚本

# Language: ahk!Z::Loop,5{send ^sSleep,100send !sySleep,300FileRead, cont,*P65001 股票分级基金 - 集思录.htmlStringReplace, cont, cont,<tr id=, `r`n<, Allcont :=RegExReplace(cont,"^.*(?!class=.*)","")cont :=RegExReplace(cont,".*","")cont :=RegExReplace(cont,"U)<.*>"," ")cont :=RegExReplace(cont," ","")cont :=RegExReplace(cont,"<","<")cont :=RegExReplace(cont,"[ |\t]+\r","`r")cont :=RegExReplace(cont,"^\s+","")cont :=RegExReplace(cont,"\s+$","")msgbox,%cont%Sleep,5000}参考资料图片表格公式代码完整版请参看动态网页数据的简单获取方法




https://wap.sciencenet.cn/blog-548663-851732.html

上一篇:八面体与截角八面体团簇的构建及代码实现
下一篇:GROMACS中文手册第1章
收藏 IP: 130.184.197.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-14 06:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部