爬虫学习——Scrapy框架学习(五)(股票数据Scrapy爬虫实例及其爬取速度优化)
“股票数据Scrapy爬虫”实例介绍
功能描述:
技术路线:scrapy
目标:获取上交所和深交所所有股票的名称和交易信息
输出:保存到文件中
数据网站的确定:
获取股票列表:
东方财富网:http://quote.eastmoney.com/stock_list.html
获取个股信息:
百度股票:https://gupiao.baidu.com/stock/
单个股票:例如https://gupiao.baidu.com/stock/sz000538.html
编写:
步骤:
1、建立工程和Spider模板;
2、编写Spider;
3、编写Item Pipelines
步骤1:建立工程和Spider模板
>scrapy startproject BaiduStocks
>cd BaiduStocks
>scrapy genspider stocks baidu.com
进一步修改spiders/stocks.py文件
步骤2:编写Spider
①配置stocks.py文件
②修改对返回页面的处理
③修改对新增URL爬取请求的处理
[code]# -*- coding: utf-8 -*- import scrapy import re class StocksSpider(scrapy.Spider): name = 'stocks' #allowed_domains = ['baidu.com'] #首先从东方财富网中获得所有股票的代码 start_urls = ['http://quote.eastmoney.com/stock_list.html'] def parse(self, response): for href in response.css('a::attr(href)').extract(): try: stock=re.findall(r"[s][hz]\d{6}",href)[0]#获取其中的股票代码 #生成对应的百度股票中个股信息的链接 url="https://gupiao.baidu.com/stock/"+stock+'.html' #作为一个新的请求重新提交给Scrapy爬虫,可以用yield关键字 yield scrapy.Request(url,callback=self.parse_stock) except: continue def parse_stock(self,response): #因为需要提交给Item Pipeline,所以我们定义一个空字典 infoDict={} stockInfo=response.css('.stock-bets')#能找到这一格式的所有区域 name=stockInfo.css('.bets-name').extract()[0] keyList=stockInfo.css('dt').extract() valueList=stockInfo.css('dd').extract() for i in range(len(keyList)): key=re.findall(r'>.*</dt>',keyList[i])[0][1:-5] try: val=re.findall(r'\d+\.?.*</dd>',valueList[i])[0][0:-5] except: val='--' infoDict[key]=val infoDict.update( {'股票名称':re.findall('\s.*\(',name)[0].split()[0]+ \ re.findall('\>.*\<',name)[0][1:-1]} ) #将infoDict给到Item Pipeline yield infoDict
步骤3:编写Pipelines
①配置pipelines.py文件
②定义对爬取项(Scraped Item)的处理类
编写pipelines.py文件:
[code]# -*- 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 BaidustocksPipeline(object): def process_item(self, item, spider): return item #生成了一个新类 class BaidustocksInfoPipeline(object): #当一个爬虫被调用时对应的pipeline启动的方法 def open_spider(self,spider): self.f=open('BaiduStockInfo.txt','w') def close_spider(self,spider): self.f.close() #对每一个item项进行处理时调用的方法 def process_item(self,item,spider): try: line=str(dict(item))+'\n' self.f.write(line) except: pass #若我们希望其他函数也可以处理这个item,则返回它 return item
在这个文件中,我们放弃了原有的类,尝试定义新类的方法并通过修改配置文件,让框架找到我们新定义的这个类
③配置ITEM_PIPELINES选项,让框架找到我们这个新类(settings.py)
修改此部分(注意去掉注释):
[code]# Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'BaiduStocks.pipelines.BaidustocksInfoPipeline': 300, }
到此程序结束
执行程序:
scrapy crawl stocks
实例优化:
提取爬取速度
依靠scrapy库提供的相应的参数
配置并发连接选项
settings.py
_________________________________________________________________________
选项 ||| 说明
CONCURRENT_REQUESTS Downloader最大并发请求下载数量,默认32
CONCURRENT_ITEMS Item Pipeline最大并发ITEM处理数量,默认100
CONCURRENT_REQUESTS_PER_DOMAIN 每个目标域名最大的并发请求数量,默认8
CONCURRENT_REQUESTS_PER_IP 每个目标IP最大的并发请求数量,默认0,非0有效
—————————————————————————————————————————
更多的方法可以参考scrapy的文档
- 数据分析——以斗鱼为实例解析requests库与scrapy框架爬虫技术
- Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)
- 【python爬虫学习笔记】07 股票数据定向爬虫实例
- 爬虫:股票数据Scrapy爬虫实例
- scrapy爬虫框架学习入门教程及实例
- Python爬虫学习-股票数据定向爬虫(实例)
- Python爬虫框架Scrapy 学习笔记 8----Spider
- 设置MySQL中的数据类型来优化运行速度的实例
- 爬虫Scrapy框架之学习使用(一)
- Python爬虫框架Scrapy 学习笔记 10.3 -------【实战】 抓取天猫某网店所有宝贝详情
- python爬虫框架scrapy实例详解
- (转载)scrapy三步曲scrapy的简介、安装与实例(python抓取的爬虫框架)
- scrapy框架爬虫,爬取腾讯职业实例
- 使用python scrapy爬虫框架 爬取科学网自然科学基金数据
- python爬虫框架scrapy学习之CrawlSpider
- Scrapy学习笔记V--Items 爬虫数据的存储.数据模板
- Scrapy爬虫框架的学习
- 爬虫Scrapy框架之学习使用(二):DownloaderMiddleWares
- Python爬虫框架Scrapy实例代码