V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lovezww2011
V2EX  ›  Python

使用 Scrapy 爬取股票代码

  •  
  •   lovezww2011 ·
    geeeeeeeek · 2019-02-25 16:49:37 +08:00 · 2377 次点击
    这是一个创建于 1859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人博客: https://mypython.me

    源码地址: https://github.com/geeeeeeeek/scrapy_stock

    抓取工具:scrapy

    scrapy 介绍

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取 API 所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

    安装 scrapy

    pip install Scrapy
    

    抓取步骤

    选择一个网站 --> 定义数据 --> 编写 spider

    首先使用 scrapy 创建一个项目

    scrapy startproject tutorial
    

    1.选择一个网站

    这里我们选择的是东方财富网的股票代码页面: http://quote.eastmoney.com/stocklist.html

    2.定义要抓取的数据

    我们需要抓取股票的代码 id,因此只需要定义 stock_id

    class StockItem(scrapy.Item):
        stock_id = scrapy.Field()
    

    3.编写 spider

    class StockSpider(scrapy.Spider):
        name = 'stock'
    
        def start_requests(self):
            url = 'http://quote.eastmoney.com/stocklist.html'
            yield Request(url)
    
        def parse(self, response):
            item = StockItem()
            print "===============上海================"
            stocks_sh = response.css('div#quotesearch ul li a[href*="http://quote.eastmoney.com/sh"]::text')
            for stock in stocks_sh:
                item['stock_id'] = 's_sh' + re.findall('\((.*?)\)', stock.extract())[0]
                yield item
    
            print "===============深圳================"
            stocks_sz = response.css('div#quotesearch ul li a[href*="http://quote.eastmoney.com/sz"]::text')
            for stock in stocks_sz:
                item['stock_id'] = 's_sz' + re.findall('\((.*?)\)', stock.extract())[0]
                yield item
    
    

    玄机尽在response.css('div#quotesearch ul li a[href*="http://quote.eastmoney.com/sh"]::text ’),使用了 css 来过滤自己需要的数据。

    运行程序

    scrapy crawl stock -o stock.csv
    

    即可生成 stock.csv 文件

    预览如下:

    stock_id
    s_sh201000
    s_sh201001
    s_sh201002
    s_sh201003
    s_sh201004
    s_sh201005
    s_sh201008
    s_sh201009
    s_sh201010
    s_sh202001
    s_sh202003
    s_sh202007
    s_sh203007
    s_sh203008
    s_sh203009
    …
    

    如果要查询单个股票的股票行情,可以使用新浪的股票接口:

    http://hq.sinajs.cn

    例如

    http://hq.sinajs.cn/list=s_sh600756

    即可得到浪潮软件的股票行情

    var hq_str_s_sh600756="浪潮软件,19.790,1.140,6.11,365843,70869";
    
    5 条回复    2019-03-07 01:08:47 +08:00
    wenbinwu
        1
    wenbinwu  
       2019-02-25 16:57:58 +08:00
    挺好的,加个 gitignore 文件把 pyc 文件都删掉
    JCZ2MkKb5S8ZX9pq
        2
    JCZ2MkKb5S8ZX9pq  
       2019-02-25 17:00:01 +08:00
    可以试试 tushare
    Martzki
        3
    Martzki  
       2019-02-25 21:24:04 +08:00
    老哥你好,最近在学 scrapy-splash,我的 splash 似乎没有起到渲染的作用,不知道是 splash 的问题还是网页的问题。
    具体来说,是爬取一个表格,表头存在,表内容由 JS 函数填充。
    网页: https://www.aqistudy.cn/historydata/daydata.php?city=%E6%AD%A6%E6%B1%89&month=201312
    splash 版本:3.3.1
    OS 版本:Windows 10 专业版
    ranlele
        4
    ranlele  
       2019-03-06 17:50:55 +08:00
    @Martzki wait 多等几秒试试
    911speedstar
        5
    911speedstar  
       2019-03-07 01:08:47 +08:00
    scrapy-splash 用于处理动态请求,需要等待 js 加载完
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2824 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 598ms · UTC 13:26 · PVG 21:26 · LAX 06:26 · JFK 09:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.