1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授

股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授

时间:2020-06-10 07:17:29

相关推荐

股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授

股票数据Scrapy爬虫

本文对中国大学慕课上《Python网络爬虫与信息提取》课程中的最后一个实例“股票数据Scrapy爬虫”给出了具体的更新后的实现步骤。

更新

课程中介绍的是采用百度股票和东方财富网,但由于百度股票已不可访问,故此处采用的是证券之星和网易财经。

功能描述

目标:获取上证A股股票名称和交易信息;输出:将信息保存到文件中;技术路线:采用Scrapy框架进行爬取;

程序结构设计

首先在证券之星中获取所有股票的代码;其次在网易财经中获取每一支个股的信息;将结果存储到文件中;

具体实现步骤

建立一个Scrapy爬虫工程:

通过命令指示符在目录D:\pycodes(你所希望将项目存储的位置)下执行命令 “scrapy startproject Stocks”,建立一个名为“Stocks”的工程,如图所示:

可查看在该项目中生成了多个文件,如图所示:

在工程中创建一个爬虫:

通过命令指示符在目录D:\pycodes\Stocks下执行命令“scrapy genspider stocks ”,“stocks”为爬虫文件名,“”为爬虫页面的初始域名,如图所示:

可在项目中观察到多了一个文件“stocks.py”,如图所示:

更改爬取方法的具体功能,具体代码:

(1)打开“stocks.py”文件,修改代码,如下所示:

import reimport scrapyclass StocksSpider(scrapy.Spider):name = 'stocks'start_urls = ['/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./" + '0' + stock + '.html'yield scrapy.Request(url=url, callback=self.parse_stock)except:continuedef 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

(2)打开“pipelines.py”文件,修改代码,如下所示:

# -*- coding: utf-8 -*-# Define your item pipelines here## Don't forget to add your pipeline to the ITEM_PIPELINES setting# See: /en/latest/topics/item-pipeline.htmlclass ScrapystocksPipeline(object):def process_item(self, item, spider):return itemclass ScrapystocksInfoPipeline(object):def open_spider(self, spider):#爬虫启动,对应的pipeline方法self.f = open('ScrapyStockInfo.txt', 'w')def close_spider(self, spider): #爬虫关闭,对应的pipeline方法self.f.close()def process_item(self, item, spider): #核心部分,存储为文件try:line = str(dict(item)) + '\n'self.f.write(line)except:passreturn item

(3)打开“settings.py”文件,修改部分代码,如下所示:

原代码:

#ITEM_PIPELINES = {# 'Stocks.pipelines.StocksPipeline': 300,#}

修改后:去掉注释,修改pipeline类名称

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

运行爬虫:

通过命令指示符在目录D:\pycodes\Stocks下执行命令“scrapy crawl stocks”,运行爬虫文件stocks,如图所示:

可以看到股票信息陆续输出:

也可以直接在Pycharm中打卡整个项目,通过Terminal执行命令“scrapy crawl stocks”,如图所示:

到此,整个爬虫就结束了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。