经常使用scrapy框架爬取股票数据 (经常使用生理盐水喷鼻子好吗)

经常使用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框架提供了一套完整的网页抓取工具,但数据剖析和可视化并不属于其步骤之一。

这两个步骤须要经常使用其余工具来成功,理论在数据贮存之后启动。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读