经常使用scrapy框架爬取股票数据 (经常使用生理盐水喷鼻子好吗)
本文目录导航:
经常使用scrapy框架爬取股票数据
@概述
本例将手把手带大家成功一个经常使用scrapy框架爬取股票数据的例子
咱们将同花顺中融资融券中的几只个股的历史数据爬上去,并保留为csv文件(csv格局是数据剖析最友好的格局)
本例经常使用到了pileline和两边件middleware
@爬取标的
咱们对融资融券对应的相关个股的前三页历史数据爬上去,如图所示:
@创立工程
scrapy startproject mystockspider
@工程结构简介
mystocks/ 工程根目录
mystocks/mystocks/ 工程代码寄存目录
部署文件
mystocks/mystocks/spiders/ 爬虫源文件寄存目录
mystocks/mystocks/ 数据模型模块
mystocks/mystocks/ 数据模型解决模块
mystocks/mystocks/ 下载两边件模块
mystocks/mystocks/ 设置模块
@在中创立数据模型
#?个股数据模型class?StockItem():????#?股票称号????name?=?()????#?股票详细消息????data?=?()@在spiders/目录下创立爬虫源代码my_stock_
源文件称号和类称号都是恣意的
name属性所定义的爬虫称号,未来启动爬虫的命令会经常使用到
start_urls是爬虫开局上班的起始页
#?定义爬虫类class?MyStockSpider():????#?定义爬虫称号(命令行启动爬虫要用)????name?=?mystockspider????#?定义起始?url????start_urls?=?[定义起始页照应的解决函数parse这里的parse函数的称号和参数都是固定的写法,无法扭转,可以在IDE中间接经过拔出覆写方法成功
????#?照应解决函数????#?response为start_url所前往的照应答象????def?parse(self,?response):@首页照应函数的详细成功
这里要做的事情就是从页面超链接中提取出【个股称号】和【概略页超链接】
xpath规定请参见:向每支个股概略页区分动员恳求
概略页的照应将由一个自定义的handle_detail方法来解决
????#?照应解决函数????#?response为start_url所前往的照应答象????def?parse(self,?response):????????#?提取页面个股超链接????????a_list?=?(//div[@id=rzrq]/table[@class=m-table]/tbody/tr/td[2]/a)????????#?遍历一切超链接????????for?a?in?a_list?:????????????#?提取股票称号、下载数据的url????????????gp_name?=?(./text())()[0]????????????link?=?(./@href)()[0]????????????gp_id?=?(/)[-2]????????????print(gp_id?:?,?gp_id)????????????#?以个股称号作为文件称号,建设或清空一下文件????????????file_name?=?./files/?+?gp_name?+?????????????with?open(file_name,w):????????????????pass????????????#?针对每只个股动员爬取子链接的恳求????????????#?对子链接的解决交由download_data函数启动解决????????????#?meta?=?转交子链接解决函数所解决的数据????????????yield?(????????????????url=link,????????????????callback=_detail,????????????????meta={page:?1,?url_base:?link,?name:?gp_name,id:gp_id}????????????)@成功概略页的解决函数handle_detail
概略页是一个分页数据,每一页的解决逻辑是相反的
即提取表格数据,逐行减少到数据模型中
提交数据模型给pipeline做后续解决
最后向下一页继续动员恳求,恳求的回调解决函数依然为以后函数
留意:这里因为递归调用了自身,必定要有中断条件,本例的中断条件是爬满三页即止
????#?解决个股子链接前往的照应????def?handle_detail(self,?response):????????#?结构数据模型????????item?=?StockItem()????????item[name]?=?[name]????????item[data]?=?????????#?提取出一切行,而后逐行提取一切单元格中的数据????????#?将数据保留到数据模型????????tr_list?=?(//table[@class=m-table]/tbody/tr)????????for?tr?in?tr_list:????????????#?提取一切单元格中的数据,以英文逗号衔接????????????text_list?=?(./td/text())()????????????onerow?=?,(?[()?for?text?in?text_list]?)????????????#?存储数据到item????????????item[data]?+=?onerow+\n????????#?提交数据模型给pipeline解决????????yield?item????????#?爬取个股分页数据,最多爬取3页????????[page]?+=?1????????if?[page]?>?3?:????????????#?不再提交新的恳求,爬虫完结????????????return????????#?组装个股分页数据url????????url_str?=?稍事劳动后,爬取下一页数据,仍交由以后函数解决????????(1)????????yield?(????????????url=url_str,????????????callback=_detail,????????????meta={page:?[page],?url_base:?url_str,?name:?[name],[id]}????????)@在中定义数据模型解决类
这里的重要解决逻辑在process_item覆写方法中,
这里的解决逻辑很繁难,就是把数据模型中的数据写入对应的文件
开头处return了数据模型item,return给谁呢,答案是下一个pipeliine,假设有的话
#?解决spider前往的item对象class?StockSavingPipeline(object):????#?初始化方法????def?__init__(self):????????print(\n*5,StockSavingPipeline?__init__)????#?解决spider前往的item对象????#?item?=?爬虫提交上来的数据模型????#?spider?=?提交item的爬虫实例????def?process_item(self,?item,?spider):????????print(\n?*?5,?StockSavingPipeline?process_item)????????#?提取数据????????data?=?item[data]????????file_name?=?./files/+item[name]+????????#?向文件中写入数据????????with?open(file_name,a)?as?file:????????????(data)????????#?假设有多个pipeline,继续向下一个pipeline传递????????#?不前往则传递中断????????#?这里重要表现一个分工、分批解决的思维????????return?item????#?对象被销毁时调用????def?__del__(self):????????print(\n?*?5,?StockSavingPipeline?__del__)@通知框架爬虫提交的数据对象由谁解决,这里有两种设置方式
方式1:设置在中
这里设置了多个pipeline解决类,一切爬虫类提交的一切item都会经过一切这些pipeline类
这些pipeline的解决顺序是从小到大的,即100的会先解决,200的后解决,其取值范畴是0-1000
ITEM_PIPELINES?=?{????:?200,????_2:?100,????:?100,}方式2:设置在爬虫类中,本例即MyStockSpider类中
间接设置在爬虫类中,其优先级要高于设置在中
这个规定关于前面关于下载两边件的性能也雷同实用
#?申明经常使用哪些pipelines和下载两边件#?这里设置的优先级要高于文件custom_settings?=?{????ITEM_PIPELINES:{:100},}@性能下载两边件
下载两边件的作用是对恳求和照应启动预解决
比如对一切恳求减少随机的User-Agent
比如对一切恳求随机性能代理IP
其性能雷同有两种方式:性能在中或性能在爬虫类中,后者的优先级要高于前者
中的性能如下:
#?性能下载两边件DOWNLOADER_MIDDLEWARES?=?{?#?:?543,?:?543,}爬虫类中的性能如下:
#?申明经常使用哪些pipelines和下载两边件#?这里设置的优先级要高于文件custom_settings?=?{?ITEM_PIPELINES:{:100},?DOWNLOADER_MIDDLEWARES:{:?543},}@成功下载两边件
这里成功对一切恳求减少随机恳求头和IP代理
因为两边件雷同也是可以性能多个,串联成链式结构的,所以return的标的下一个两边件
#?定义爬虫类class?MyStockSpider():????#?定义爬虫称号(命令行启动爬虫要用)????name?=?mystockspider????#?定义起始?url????start_urls?=?[命令行中跑起来,爬虫就会源源始终地开局爬了这里要提早cd到爬虫工程的根目录
假设在linux环境下,可以在前面加sudo,可以防止一些没必要的稀罕乖僻的失误
#?定义爬虫类class?MyStockSpider():????#?定义爬虫称号(命令行启动爬虫要用)????name?=?mystockspider????#?定义起始?url????start_urls?=?[原文:Python编程基础之(五)Scrapy爬虫框架
经过前面四章的学习,咱们曾经可以经常使用Requests库、Beautiful Soup库和Re库,编写基本的Python爬虫程序了。
那么这一章就来学习一个专业的网络爬虫框架--Scrapy。
没错,是框架,而不是像前面引见的函数性能库。
Scrapy是一个极速、性能弱小的网络爬虫框架。
或者大家还不太了解什么是框架,爬虫框架其实是成功爬虫性能的一个软件结构和性能组件的汇合。
简而言之, Scrapy就是一个爬虫程序的半成品,可以协助用户成功专业的网络爬虫。
经常使用Scrapy框架,不须要你编写少量的代码,Scrapy曾经把大局部上班都做好了,准许你调用几句代码便智能生成爬虫程序,可以节俭少量的期间。
当然,框架所生成的代码基本是分歧的,假设遇到一些特定的爬虫义务时,就不如自己经常使用Requests库搭建来的繁难了。
PyCharm装置
测试装置:
发生框架版本说明装置成功。
把握Scrapy爬虫框架的结构是经常使用好Scrapy的重中之重!
先上图:
整个结构可以繁难地概括为: “5+2”结构和3条数据流
5个重要模块(及性能):
(1)控制一切模块之间的数据流。
(2)可以依据条件触发事情。
(1)依据恳求下载网页。
(1)对一切爬取恳求启动调度治理。
(1)解析DOWNLOADER前往的照应--response。
(2)发生爬取项--scraped item。
(3)发生额外的爬取恳求--request。
(1)以流水线方式解决SPIDER发生的爬取项。
(2)由一组操作顺序组成,相似流水线,每个操作是一个ITEM PIPELINES类型。
(3)清算、审核和查重爬取项中的HTML数据并将数据存储到数据库中。
2个两边键:
(1)对Engine、Scheduler、Downloader之间启动用户可性能的控制。
(2)修正、摈弃、新增恳求或照应。
(1)对恳求和爬取项启动再解决。
(2)修正、摈弃、新增恳求或爬取项。
3条数据流:
(1):图中数字 1-2
1:Engine从Spider处取得爬取恳求--request。
2:Engine将爬取恳求转发给Scheduler,用于调度。
(2):图中数字 3-4-5-6
3:Engine从Scheduler处取得下一个要爬取的恳求。
4:Engine将爬取恳求经过两边件发送给Downloader。
5:爬取网页后,Downloader构成照应--response,经过两边件发送给Engine。
6:Engine将收到的照应经过两边件发送给Spider解决。
(3):图中数字 7-8-9
7:Spider解决照应后发生爬取项--scraped item。
8:Engine将爬取项发送给Item Pipelines。
9:Engine将爬取恳求发送给Scheduler。
义务解决流程:从Spider的初始爬取恳求开局爬取,Engine控制各模块数据流,不连续从Scheduler处取得爬取恳求,直至恳求为空,最后到Item Pipelines存储数据完结。
作为用户,只有性能好Scrapy框架的Spider和Item Pipelines,也就是数据流的入口与进口,便可成功一个爬虫程序的搭建。
Scrapy提供了繁难的爬虫命令语句,协助用户一键性能残余文件,那咱们便来看看有哪些好用的命令吧。
Scrapy驳回命令行创立和运转爬虫
PyCharm关上Terminal,启动Scrapy:
Scrapy基本命令行格局:
详细罕用命令如下:
上方用一个例子来学习一下命令的经常使用:
1.建设一个Scrapy爬虫工程,在已启动的Scrapy中继续输入:
口头该命令,系统会在PyCharm的工程文件中智能创立一个工程,命名为pythonDemo。
2.发生一个Scrapy爬虫,以教育部网站为例:
命令生成了一个名为demo的spider,并在Spiders目录下生成文件。
命令仅用于生成文件,该文件也可以手动生成。
观察一下文件:
3.性能发生的spider爬虫,也就是文件:
4.运转爬虫,爬取网页:
假设爬取成功,会发如今pythonDemo下多了一个t_的文件,咱们所爬取的网页内容都曾经写入该文件了。
以上就是Scrapy框架的繁难经常使用了。
Request对象示意一个HTTP恳求,由Spider生成,由Downloader口头。
Response对象示意一个HTTP照应,由Downloader生成,有Spider解决。
Item对象示意一个从HTML页面中提取的消息内容,由Spider生成,由Item Pipelines解决。
Item相似于字典类型,可以依照字典类型来操作。
scrapy框架步骤不包含
Scrapy框架步骤中不包含数据贮存后的数据剖析和可视化。
Scrapy是一个用于网页抓取的Python框架,它提供了一套完整的工具,使得用户可以繁难地抓取、解析和贮存网页数据。
Scrapy框架的重要步骤包含:定义抓取指标、编写爬虫程序、解析网页数据、贮存数据。
但是,数据剖析和可视化并不属于Scrapy框架的步骤。
数据剖析是指用适当的统计方法对搜集的少量数据启动剖析,以提取有用消息并构成论断的环节。
可视化则是将数据以图形、图表等直观的方式展现进去,便于了解和剖析。
这两个步骤理论在数据贮存之后启动,须要经常使用数据剖析工具(如Python的Pandas库、R言语等)或可视化工具(如Excel、Tableau、PowerBI等)。
例如,假定咱们经常使用Scrapy框架抓取了一家电商网站上商品的多少钱和开售量数据,并将这些数据贮存到了CSV文件中。
接上去,咱们或者会经常使用Pandas库对这些数据启动解决和剖析,比如计算平均多少钱、开售量最高的商品等。
而后,咱们可以经常使用Excel或Tableau将这些数据以图表的方式展现进去,便于了解和剖析多少钱和开售量之间的相关。
总之,只管Scrapy框架提供了一套完整的网页抓取工具,但数据剖析和可视化并不属于其步骤之一。
这两个步骤须要经常使用其余工具来成功,理论在数据贮存之后启动。