定向获取固定数据

周末下雨,原本计划泡汤,只好宅在家中。

翻翻网页,觉着写一个python爬虫吧。作为一个只会c的程序员,表示python的基本语法看起来还是蛮清楚的。大致差不多。

然后就爬一下基金的当前价格吧,本来想着写完后让它一直运行,后来写完发现mathematica里直接有函数可以查往年基金价格的接口,那就没必要了。

我的步骤就是简单暴力,因为之前也没有写过爬虫,只知道个大概,所以写起来也是野路子。

首先就是要拿到所有的基金代码,这个网站有列http://fund.eastmoney.com/allfund.html

我用python2.7的,上来直接用urllib2库的接口把html内容拿到,然后就是将数据解析出来保存在文件中。

因为python也是现学的,所以代码可能写的比较烂  

import urllib2

#to get target html

url = ‘http://fund.eastmoney.com/allfund.html‘
f = urllib2.urlopen(url)
html = f.read()

#now we get the html context in html, but case ‘gb2312‘, so we should translate to utf-8
after_translate = html.decode(‘gb2312‘,‘ignore‘).encode(‘utf-8‘)

print(after_translate)

save = f.open("fundAll-decode.txt",‘w‘)
save.write(after_translate)
save.close()

上面的代码是得到对应网页的html原始内容,先保存起来慢慢分析处理。

因为拿的都是静态的内容,也不存在get,post那些操作,所以直接解析数据就可以得到基金代码了。

解析的话,就直接正则匹配了

import re

def unique(old_list):
    newList = []
    for x in old_list:
        if x not in newList:
            newList.append(x)
    return newList

f = open("data.txt",‘r‘)
html = f.read()

p = re.compile(r‘\d{6}‘)
#get all len(code) == 6 fundCode

#get fundCode type string
r = unique(p.findall(html))

saveFile = open("fundCode.txt",‘w‘)

for i in r:
    saveFile.write(i+‘\r\n‘)

saveFile.close()

因为基金代码是6位数字的,所以直接匹配6位数据就可以了,好吧这边我偷懒了。因为后面得到的有些会重复,所以写了一个unique函数来filter数据

那基金的话,就只要写一个接口,传入基金code,返回得到的current price,非工作日它的price是固定的。

因为网址是固定+基金代码.html的格式来的,这也是为什么一开始要得到所有基金code的原因了。

import urllib2
import time
import re

url_begin = ‘http://fund.eastmoney.com/‘
url_end = ‘.html‘

def getPrice(code):
    url = url_begin + code + url_end
    html = urllib2.urlopen(url).read()
   # too avoid execpt, no handler it,jiut print log
  try:
        match1 = re.compile(r‘(?<=fundpz\"><span\ class\=\")\D+\d\.\d{4}‘)
        ret_match1 = match1.findall(html)

        match2 = re.compile(r‘\d\.\d{4}‘)
        ret_match2 = match2.findall(ret_match1[0])
    except Exception,e:
        print "["+ code +"]",Exception,":",e
        return ‘ ‘

    return ret_match2[0]

#sometimes re split there is ‘ ‘
def rightCode(a):
    newList = []
    for i in a:
        if len(i) == 6:
            newList.append(i)
    return newList

#get fund code from fundCode.txt
def getCodeDict():
    f = open("fundCode.txt",‘r‘)
    match1 = re.compile(r‘\r\n‘)
    x = rightCode(match1.split(f.read()))
    f.close()
    return x

if __name__ == "__main__":
    x = getCodeDict()
    while(1):
        for i in x:
            print getPrice(i)

上述代码中html解析了两次才得到price值,本来想着直接匹配数值,但是发现匹配出来有好几个价格,而且当有些基金停牌的时候,没有价格的,根本就搞不定。最后是强行正则匹配fundpz这个的值。

至此,基本能够打印网页上的fundpz这一标签的price。

总结来说,这段代码毫无通用性可以,唯一的优点也就是码一遍熟悉一下键盘键位,然后就是对python的语法有些印象。然后对正则也稍微学习了一下。了剩余无嘛,既然搞了一下,不管是好还是不好,先记录一下。下次翻一翻就会感叹:“我擦,这代码尽然是我写的,居然跟翔一样”。:)

时间: 2024-10-12 19:19:59

定向获取固定数据的相关文章

C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的openID,进而就能获取到更多的用户信息,这个在会员信息的场景里面用的很多,本篇介绍在网站中迅速配置这样的菜单链接,并介绍如何在后台获取相关的用户信息,实现页面数据个性化的展现操作. 我们知道,微信的自定义菜单分为两大类,分别对应Click类型和View类型的,而重定向属于View类型的一种,如下所示. 1.微信重

关于springmvc的获取前段数据和页面输出

项目的创建在这里就不写啦,如果实在不会,看看前面的,这里就直接上代码啦! 首先,是创建一个jsp文件,功能实现简单的登录功能,没什么重要的.. 这个就是简单的前段界面,这里需要注意的一点就是action="login",这里的login是一个虚拟路径, 也就是获取前端数据action的虚拟路径,要前后一致: 下面的就是获取前段数据以及验证的一种方式,这一中是比较简单的 就是在入参处获取request的对象:从而达到下面的操作 @Controllerpublic class LoginC

PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录

参考资料:http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/http://blog.csdn.net/fly_leopard/article/details/51148904http://www.tuicool.com/articles/uIJzYff http://blog.csdn.net/u010029983/article/details/46364113等 模拟新浪微博登录是抓取新浪数据的基础,网上的参考资料

jquery autocomplete ajax获取动态数据,兼容各浏览器,支持中文

jquery.autocomplete.js经过改动,支持各种浏览器.支持中文输入! 1.效果图例如以下 2.HTML和ajax代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html

十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用

react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数据模块实现请求数据 一.axios 获取Api数据 使用文档:https://www.npmjs.com/package/axios git项目地址:https://github.com/axios/axios axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净(后端运行跨域) npm官网:https://www.npmjs.com,在其搜索:axios即可看到详细说

前台通过ajax获取后台数据,PHP如何返回中文数据

现在经常使用Ajax调用后台php获取后台数据,但是PHP返回的数据如果含有中文的话,Ajax会无法识别,那咋整呢,我用的是比较笨的方法,但是实用: echo urldecode(json_encode(array('status'=>'1', 'errMsg'=>urlencode('数据传递错误,请重试')))); return;

ajax请求获取的数据无法赋值给全局变量问题总结

一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数据,除了详情页面被加载之后需要向服务器发送ajax请求,在详情页面还有几个表单控件的属性需要去请求服务器获取实际项目中要求要显示的数据. 如下代码,直接在ajax请求中改变表单控件的值,避开了给全局变量赋值. 给全局变量赋值的解决办法,给ajax请求设置async为false,表示请求为同步请求:

一个实时获取股票数据的安卓应用程序

关键字:Stock,股票,安卓,Android Studio. OS:Windows 10. 最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取股票数据,取名为Mystock.使用开发工具Android Studio,需要从Android官网下载,下载地址:http://developer.android.com/sdk/index.html.不幸的是Android是Google公司的,任何和Google公司相关的在国内都无法直接访问,只能

.NET 微信开发之 获取用户数据

通过微信接口获取用户信息主要分为以下几个步骤: a.获取公众号的access_token b.通过查询所有用户OPenid接口获取所有用户. string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token; c.通过获取用户openid,然后通过openid获取用户数据 d.把用户信息添加到数据库中. 1.参数化查询以及添加用户信息到数据库方法 public void AddT