python正则表达式爬取网页数据_Python网页抓取正则表达式应用练习爬取基金信息...

该博客通过Python的requests和正则表达式爬取了东方财经网站上的基金数据,包括基金代码、涨跌幅、基金名称和更新时间。博主分享了使用正则表达式抓取网页数据的体验,提到Python库的强大以及网页抓取时的字符集处理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅作练习: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('(.*?)\(*<.>(.*?)

id = info[1]

name = info[0]

statuszdf = re.findall('"gz_gztime">(.*?)<.>(.*?)

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'

(.*?\))', 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">(.*?)<.>(.*?)

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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值