Python网页抓取正则表达式应用练习-爬取基金信息

仅作练习:
1、Python网页抓取
2、Python正则表达式应用

直接上代码:
# coding: utf-8

import os
import re
import sys
import star
import requests

# reload(sys)
# sys.setdefaultencoding("utf-8")

# 基金代码
fundIds = ['000051', '519156', '', '000524', '000960', '163110','000457', '', '519669', '000961','000962','420001', '000697',
'470028', '470009', '001410', '', '110026', '110029', '000603', '', '150182']

def getInfo(url):
html = star.gethtml(url)
text = re.findall('class=\"fundDetail-tit\">(.*?)class=\"dataOfFund-line\"', html, re.S)[0]
text = text.decode('utf-8', 'ignore') #转换为unicode

info = re.findall('(.*?)\(*<.*?ui-num\">(.*?)<', text, re.S)[0]
id = info[1]
name = info[0]

statuszdf = re.findall('"gz_gztime">(.*?)<.*?"gz_gszzl">(.*?)<', text, re.S)[0]
rate = statuszdf[1]
updatetime = statuszdf[0]
print id, rate, name, updatetime

for fundid in fundIds:
if fundid=='':
print ''
else:
url = 'http://fund.eastmoney.com/{}.html'.format(fundid)
getInfo(url)
# break

os.system('pause')

输出:
000051 +1.98% 华夏沪深300ETF联接  (16-04-13 11:30)
519156 +1.85% 新华行业灵活配置混合A (16-04-13 11:30)

000960 +1.29% 招商医药健康产业股票 (16-04-13 11:30)
000524 +2.09% 上投摩根民生需求 (16-04-13 11:30)
163110 +2.00% 申万量化小盘 (16-04-13 11:30)
000457 +1.85% 上投摩根核心成长 (16-04-13 11:30)

519669 -0.01% 银河领先债券 (16-04-13 11:30)
000961 +1.98% 天弘沪深300指数型发起式 (16-04-13 11:30)
000962 +2.14% 天弘中证500指数型发起式 (16-04-13 11:30)
420001 +1.93% 天弘精选 (16-04-13 11:30)
000697 +2.06% 汇添富移动互联股票 (16-04-13 11:30)
470028 +2.34% 汇添富社会责任混合 (16-04-13 11:30)
470009 +1.91% 汇添富民营活力混合 (16-04-13 11:30)
001410 +1.76% 信达澳银新能源产业股票 (16-04-13 11:30)

110026 +2.18% 易方达创业板联接  (16-04-13 11:30)
110029 +2.00% 易方达科讯混合 (16-04-13 11:30)
000603 +2.17% 易方达创新驱动灵活配置 (16-04-13 11:30)

150182 +3.36% 富国中证军工指数分级B (16-04-13 11:30)
请按任意键继续. . .

总结:
1、正则表达式设计的有点复杂,没有Lua的好用。
2、search完全不会用,只能用与Lua类似的findall先实现起来,效率什么的先不管了。
3、网页抓取乱码问题,坑了我两天,字符集处理这个太坑了。。。太坑了。。。
4、函数返回的列表或元组的形式类似于Lua的多结果返回以及表类似。
5、冒号这个设计的有意思,好比某某说一样,比较人性化,如果能结合上Lua的优美就好了。
6、Python的库太强大太多,以前还自己为Lua封装了很多实用的库,现在发现可以直接用Python了。当然并不是说没有必要封装Lua库了,毕竟Lua小巧,适合分发与集成在用户客户端中。
7、综合起来Python确实很方便强大,值得学习。

2016年5月6日优化:
# coding: utf-8

import os
import re
import sys
import star
import requests

# reload(sys)
# sys.setdefaultencoding("utf-8")

# 基金代码
fundIds = ['000051', '519156', '', '000524', '000960', '163110','000457', '', '519669', '000961','000962','420001', '000697',
'470028', '470009', '001410', '', '110026', '110029', '000603', '', '150182']

def getInfo(url):
html = star.gethtml(url)
html = html.decode('utf-8', 'ignore') #转换为unicode
name = re.search(r'<title>(.*?\))', html, re.S).group(1)

text = re.search(r'class=\"fundDetail-tit\">(.*?)class=\"dataOfFund-line\"', html, re.S).group(1)
statuszdf = re.search(r'"gz_gztime">(.*?)<.*?"gz_gszzl">(.*?)<', text, re.S)
rate = statuszdf.group(2)
updatetime = statuszdf.group(1)
print rate, name, updatetime

for fundid in fundIds:
if fundid=='':
print ''
else:
url = 'http://fund.eastmoney.com/{}.html'.format(fundid)
getInfo(url)
# break

os.system('pause')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asmcvc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值