股票数据Scrapy爬虫

功能描述

• 目标:获取上证A股股票名称和交易信息
• 输出:保存到文件中
• 技术路线:采用scrapy框架进行爬取
此处选取股票信息静态存储在HTML页面中的页面进行爬取,之后会写一篇动态的爬取方式

程序结构设计

(1)首先得到股票代码,此处选取证券之星获得上证A股股票代码
(2)根据股票代码到网易财经获取个股详细信息
(3)将结果存储到文件

代码实现

此处在spiders文件下新创建了一个stocks.py文件
stocks.py

# -*- coding: utf-8 -*-
import re
import scrapy


class StocksSpider(scrapy.Spider):
    name = 'stocks'
    start_urls = ['http://quote.stockstar.com/stock/stock_index.htm']

    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.search(r'/gs/sh_\d{6}.shtml', href).group(0).split('_')[1].split('.')[0]
                url = "http://quotes.money.163.com/" + '0' + stock + '.html'
                yield scrapy.Request(url=url, callback=self.parse_stock)
            except:
                continue

    def parse_stock(self, response):
        infoDict = {}
        script = response.xpath('//div[@class="relate_stock clearfix"]/script[1]').extract()
        info = script[0].strip().split(',')
        infoDict['股票名称'] = eval(re.search(r'name\: \'.*\'', info[0]).group(0).split(':')[1])
        infoDict['股票代码'] = eval(re.search(r'code\: \'\d{6}\'', info[1]).group(0).split(":")[1])
        infoDict['现价'] = eval(re.search(r'price\: \'.*\'', info[2]).group(0).split(":")[1])
        infoDict['涨跌幅'] = re.search(r'change\: \'.*%', info[3]).group(0).split("'")[1]
        infoDict['昨收'] = eval(re.search(r'yesteday\: \'.*\'', info[4]).group(0).split(":")[1])
        infoDict['今开'] = eval(re.search(r'today\: \'.*\'', info[5]).group(0).split(":")[1])
        infoDict['最高'] = eval(re.search(r'high\: \'.*\'', info[6]).group(0).split(":")[1])
        infoDict['最低'] = eval(re.search(r'low\: \'.*\'', info[7]).group(0).split(":")[1])
        yield infoDict


pipelines.py

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html


class ScrapystocksPipeline(object):
    def process_item(self, item, spider):
        return item


class ScrapystocksInfoPipeline(object):
    def open_spider(self, spider):
        self.f = open('ScrapyStockInfo.txt', 'w')

    def close_spider(self, spider):
        self.f.close()

    def process_item(self, item, spider):
        try:
            line = str(dict(item)) + '\n'
            self.f.write(line)
        except:
            pass
        return item

记得在settings.py中把对应的pipeline注释去掉,使得pipelines.py可以成功执行

ITEM_PIPELINES = {
   'ScrapyStocks.pipelines.ScrapystocksInfoPipeline': 300,
}

然后运行爬虫就可以成功爬取了,对比上一次用requests + bs + re的方法,用scrapy就要快得多了,只会花费四分钟左右,不过由于是异步执行,因此会产生顺序混乱的问题,当然后期进行数据清洗也可以达到顺序排列的效果

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
股票数据scrapy爬虫是基于Python语言开发的一个网络爬虫框架,用于抓取股票数据。这个框架提供了丰富的功能和灵活的配置选项,可以快速、高效地从网页上获取所需的股票相关数据。 在使用scrapy进行股票数据爬取时,首先需要确定目标网站,然后编写爬虫程序。通过发送HTTP请求到目标网站的URL,并解析返回的HTML页面,可以从中提取股票数据。具体步骤如下: 1. 设置Scrapy的项目:使用Scrapy命令行工具创建一个新项目,包括项目名称、爬虫名称等。 2. 定义Item:在爬虫项目中定义一个Item类,用于存储爬取到的股票数据。 3. 编写爬虫:在爬虫项目中创建一个爬虫类,并继承Scrapy提供的基础爬虫类。在这个类中定义要抓取的URL、解析HTML页面的规则,并提取所需的股票数据。 4. 编写Pipeline:在爬虫项目中创建一个Pipeline类,用于处理爬取到的股票数据。可以在该类中定义数据的清洗、存储等操作。 5. 配置爬虫:在爬虫项目的配置文件中,设置HTTP请求的头部信息、最大并发数、延时等参数。 6. 执行爬虫:使用Scrapy命令行工具启动爬虫程序,开始抓取股票数据爬虫会按照预先定义的规则和流程,自动地发送请求、解析页面、提取数据,并交给Pipeline处理。 通过以上步骤,就可以使用Scrapy来实现股票数据的爬取。Scrapy框架的优点在于它具有高度的可定制性和可扩展性,可以根据具体需求对爬虫进行灵活的配置和修改。同时,它还提供了强大的调试和监控工具,方便我们进行调试和优化爬虫程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值