[python]初试页面抓取——抓取沪深股市交易龙虎榜数据

[python]抓取沪深股市交易龙虎榜数据

python 3.5.0下运行

没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行

#coding=utf-8

import gzipimport http.cookiejar
import urllib.request
import urllib.parse
import json
import os
import time
import datetime

def getOpener(head):
    # deal with the Cookies
    cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)
    header = []
    for key, value in head.items():
        elem = (key, value)
        header.append(elem)
    opener.addheaders = header
    return opener

def ungzip(data):
    try:        # 尝试解压
        print(‘正在解压.....‘)
        data = gzip.decompress(data)
        print(‘解压完毕!‘)
    except:
        print(‘未经压缩, 无需解压‘)
    return datadef writeFile(fname,data):
    filename = r‘files/‘+fname+‘.txt‘
    if os.path.exists(filename):
        message = ‘文件 + ‘+filename +‘ 已存在,跳过‘
    else:
        message = ‘文件 + ‘+filename +‘ 不存在,新建‘

        f=open(filename,‘w‘)
        f.write(data)
        f.close()
    print (‘文件:‘+fname+‘ 处理完毕。‘)
‘‘‘
读取抓取数据开始日期
如果不存在该日期,从10日前开始读取
如果存在从文件内日期开始读取
读到今天
‘‘‘
header = {
    ‘Connection‘: ‘Keep-Alive‘,
    ‘Accept‘: ‘*/*‘,
    ‘Accept-Language‘: ‘zh-CN,zh;q=0.8‘,
    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36‘,
    ‘Accept-Encoding‘: ‘gzip, deflate‘,
    ‘Host‘: ‘‘,
    ‘Referer‘ : ‘‘
}
shUrl = ‘http://query.sse.com.cn/infodisplay/showTradePublicFile.do?dateTx=‘#2015-09-28
szUrl = [‘http://www.szse.cn/szseWeb/common/szse/files/text/jy/jy‘,#150923.txt
         ‘http://www.szse.cn/szseWeb/common/szse/files/text/smeTxt/gk/sme_jy‘,#150708.txt
         ‘http://www.szse.cn/szseWeb/common/szse/files/text/nmTxt/gk/nm_jy‘]#150902.txt
startFileName = r‘startDay.txt‘
endDay = datetime.datetime.now()

if os.path.exists(startFileName):
    print(‘日期配置文件存在,开始读取‘)
    f=open(startFileName,‘rt‘)
    s = f.readline()
    f.close()
    if s!=‘‘:
        print(‘将从日期:‘+s+‘ 开始读取‘)
        timeArray = time.strptime(s, "%Y%m%d")
        timeStamp = int(time.mktime(timeArray))
        fromDay = datetime.datetime.utcfromtimestamp(timeStamp)
    else:
        print(‘日期配置文件为空,将从10日前日期开始读取‘)
        fromDay = endDay - datetime.timedelta(days = 10)
else:
    print(‘日期配置文件不存在,将从10日前日期开始读取‘)
    fromDay = endDay - datetime.timedelta(days = 10)

endDay = endDay + datetime.timedelta(days = 1)

while fromDay.strftime("%Y%m%d")!=endDay.strftime("%Y%m%d"):
    print(fromDay.strftime("%Y%m%d"))

    ‘‘‘
    循环上面日期
    抓取上证,深证,中小创交易龙虎榜数据

    如果内容不为空

    文件不存在

    写入文件
    ‘‘‘
    #抓取上证龙虎榜数据
    url = shUrl + fromDay.strftime("%Y-%m-%d")
    print(‘读取上证龙虎榜\n‘+url)

    header[‘Host‘] = ‘query.sse.com.cn‘
    header[‘Referer‘] = ‘http://www.sse.com.cn/disclosure/diclosure/public/‘

    try:
        opener = getOpener(header)
        op = opener.open(url)
        data = op.read()
        data = data.decode()
        jsonData = json.loads(data)
        outData = ‘‘
        if (jsonData[‘fileContents‘]!=‘‘):
            for info in jsonData[‘fileContents‘]:
                outData= outData+ info+‘\n‘
            writeFile(fromDay.strftime("%Y-%m-%d")+‘_上证‘,outData)
    except:
        print(fromDay.strftime("%Y-%m-%d")+‘跳过‘)

    #抓取深证,中小创交易龙虎榜数据
    i=1
    for url in szUrl:
        if(i==1):
            name = ‘深证‘
        elif(i==2):
            name = ‘中小板‘
        else:
            name = ‘创业板‘
        url = url + fromDay.strftime("%y%m%d")+‘.txt‘
        print(‘读取‘+name+‘龙虎榜\n‘+url)
        header[‘Host‘] = ‘www.szse.cn‘
        header[‘Referer‘] = ‘http://www.szse.cn‘
        try:
            opener = getOpener(header)
            op = opener.open(url)
            data = op.read()
            data = ungzip(data)
            data = data.decode(‘gbk‘)
            writeFile(fromDay.strftime("%Y-%m-%d")+‘_‘+name,data)
        except:
            print(fromDay.strftime("%Y-%m-%d")+‘跳过‘)
        i=i+1

    fromDay = fromDay + datetime.timedelta(days = 1)

#最后更新日期为当前日期
print(‘设置最新日期‘)
fromDay = fromDay - datetime.timedelta(days = 1)
f=open(startFileName,‘w‘)
f.write(fromDay.strftime("%Y%m%d"))
f.close()
print(‘读取完成‘)
时间: 2024-08-16 19:09:39

[python]初试页面抓取——抓取沪深股市交易龙虎榜数据的相关文章

python调用tushare获取沪深A股票资金流向数据

接口:moneyflow 描述:获取沪深A股票资金流向数据,分析大单小单成交情况,用于判别资金动向 限量:单次最大提取4000行记录,总量不限制 积分:用户需要至少1500积分才可以调取,基础积分有流量控制,积分越多权限越大,请自行提高积分,具体请参阅本文最下方积分获取办法 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称      |      类型      |      必选      |      描述 ts_code      |      str      |

沪深股市关注度

Sub 沪深股市关注度() On Error Resume Next Cells.Clear Columns("A:A").NumberFormatLocal = "@" Cells(1, 1) = "代码" Cells(1, 2) = "名称" Cells(1, 3) = "关注该股人数(人)" With CreateObject("WinHttp.WinHttpRequest.5.1"

示范岗沪深股市果断决定过接个

人生三大幸事莫过于成长有一对好父母,上学有一位好老师,工作有一位好领导! 根据微博内容了解到,@猫妖安妮的幸运在于,她最新进入的一家公司的领导会手把手的教她,新同事会鼓励她帮助她,每天她都会觉得很开心,让她觉得在"魔都"也会有这样的一片蓝天. http://www.pento.cn/board/29228031 http://www.pento.cn/board/29228036 http://www.pento.cn/board/29228039 http://www.pento.c

Excel_Vba 沪深股市,资产负债表下载

Sub 资产负债表() Cells.Clear Columns("A:A").NumberFormatLocal = "@" On Error Resume Next Set d = CreateObject("Scripting.Dictionary") Set hf = CreateObject("htmlfile") brr1 = Array("代码", "股票名称", "

那些长期跑赢沪深300的那些指数

我们之前在讲到指数基金的时候,都是使用沪深300指数来举例,并且使用了沪深300过去的数据进行回测. 因为沪深300,代表的是沪深两市规模最大的300家公司,它覆盖了沪深市场大约六成的市值,而且,作为宽基指数,其行业门类覆盖比较全,不受特定行业的政策性影响,具有足够的代表性. 沪深300也作为整个A股市场的基准收益对比,所有基金经理,都以战胜沪深300作为目标,哪怕是普通投资者,我们一般也以自己的投资组合收益能否战胜沪深300作为参考. 指数的本质是什么呢?其实就是一个由不同股票组成的组合.但是

python爬虫beta版之抓取知乎单页面回答(low 逼版)

闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品牌以及分类,这次也是用python来搞简单的抓取单页面版,后期再补充哈. #-*- coding: UTF-8 -*- import requests import sys from bs4 import BeautifulSoup #------知乎答案收集---------- #获取网页body

Python爬虫实战四之抓取淘宝MM照片

福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 最新动态 更新时间:2015/8/2 最近好多读者反映代码已经不能用了,原因是淘宝索引页的MM链接改了.网站改版了,URL的索引已经和之前的不一样了,之前可以直接跳转到每个MM的个性域名,现在中间加了一个跳转页,本以为可以通过这个页面然后跳转到原来的个性域名,而经过一番折腾发现,这个跳转页中的内容是JS动态生成的,所以不能用Urllib库来直接抓取了,本篇就只提供学习思路,代码不能继续用了. 之后博主会利用其它方

queryList 一次抓取多个网页内容的方法--目前只有用循环 替换页码或者给出url循环进行 queryList没有像python一样的yied迭代方法 queryList 实现多个实例抓取不同网页的内容,两个实例数据互不干扰

注意: 目前只有用循环 替换页码或者给出url循环进行   queryList没有像python一样的yied迭代方法  queryList 实现多个实例抓取不同网页的内容,两个实例数据互不干扰 新技能获取: Medoo(轻量级php数据库框架:https://medoo.lvtao.net/) 实现循环采集多个页面数据: 关键代码  for ($i = 1; $i < 21; $i++) { echo "正在爬取第{$i}页\n"; $url = "http://bl

利用python脚本(xpath)抓取数据

有人会问re和xpath是什么关系?如果你了解js与jquery,那么这个就很好理解了. 上一篇:利用python脚本(re)抓取美空mm图片 # -*- coding:utf-8 -*- from lxml import etree html = """ <!DOCTYPE html> <html> <head lang="en"> <title>我的文档</title> <meta ht