前言

今天我们编写一个用 Scrapy 框架来爬取百度股票的代码,之前写过一篇爬取百度股票的文章(点我),代码的逻辑和这篇文章的逻辑是一样的,用到的解析器不同罢了。

Scrapy 爬虫框架

Scrapy 爬虫框架是由 7+2 的结构构成: 引擎(Scrapy Engine)调度器(Schedule)下载器(Downloader)爬虫(Spider)项目通道(Item Pipeline)下载中间器(Downloader Middlewares)爬虫中间器(Spider Middlewares)

Scrapy 中的数据流(Data flow)由执行引擎控制,如下所示:

  1. 引擎Spider 中获得需要爬取初始的 Requests 。
  2. 引擎调度器 中调度 Requests 并询问下一个需要爬取的 Requests 。
  3. 调度器引擎 返回下一个要爬取的 Requests。
  4. 引擎 通过 下载中间器 把这个 Requests 传递给 下载器
  5. 一旦页面下载完毕,下载器 生成一个 Response (包含那个页面),并通过 下载中间件 把它传递给引擎。
  6. 引擎下载器 中接收 Response ,通过 爬虫中间件 的处理传递给 Spider
  7. Spider 处理完 Response 后,通过 爬虫中间件引擎 返回生成的 items 和新的 Requests (如果有的话)。
  8. 引擎 把 items 传递给 Item Pipelines ,并把处理过的 Requests 传递给 调度器 ,询问新的 requests。
  9. 程序从步骤 1 开始重复,直到 调度器 中不再有更多的请求为止。

更多 Scrapy 信息参考官方文档:

URL:https://scrapy.org/

创建 Scrapy 项目

在电脑配置好 Scrapy 后,

D 盘 创建名为 pycodes 的文件夹。

打开 cmd 命令窗口,进入 D 盘 根目录后键入:

  1. cd d:pycodes 进入目录。
  2. scrapy startproject BaiduStocks 创建名为 BaiduStocks 的目录。
  3. cd BaiduStocks 进入项目目录。
  4. scrapy genspider stocks baidu.com 创建一个名为 stocks 的 .py 文件,爬虫的初始 URL 为 baidu.com 。
  5. BaiduStocks 文件夹下找到 stocks.py 文件后用 IDE 打开,下面我们来编写代码。

stocks.py

import scrapyimport reclass stocksSpider(scrapy.Spider):name = 'stocks'start_urls = ['http://quote.eastmoney.com/stocklist.html']def parse(self, response):for href in response.css('a::attr(href)').extract():try:stock = re.findall('[s][zh]d{6}', href)[0]url = 'http://gupiao.baidu.com/stock/' + stock + '.html'yield scrapy.Request(url, callback=self.parse_stock)except:continuedef parse_stock(self, response):infoDict = {}stockInfo = response.css('.stock-bets') #只搜索'.stock-bets'标签下的'dt'和'dd'标签stockname = stockInfo.css('.bets-name').extract()keyList = stockInfo.css('dt').extract()valueList = stockInfo.css('dd').extract()for i in range(len(keyList)):key = re.findall('<dt.*?>(.*?)</dt>', keyList)[0]try:value = re.findall('<dd.*?>(.*?)</dd>', valueList)[0]except:value = '--'infoDict[key] = valueinfoDict.update({'股票名称': re.findall('<a.*?">(.*?)(<span.*?)', stockname)})yield infoDict
复制代码
  • parse 函数用到关键字 yield ,由于 parse 函数生成的股票 URL 超过 4500 个,如果以列表形式传递给 parse_stocks , 给内存造成的负担会更大。
  • 在文件夹 BaiduStocks 下找到 pipelines.py ,用 IDE 打开。

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.htmlclass BaidustocksPipeline(object):def open_item(self, spider):self.f = open('baiduStockInfo.txt', 'w')def close_item(self, spider):self.f.close()def process_item(self, item, spider):try:line = str(dict(item)) + '
'self.f.write(line)except:passreturn item
复制代码

类 BaiduStocksPipeline 有三个函数: open_item 、 close_item 、 process_item 。

至此,代码编写完成,运行程序,结果会保存在一个名为 baiduStockInfo 的 txt 文件中

转载于:https://juejin.im/post/5be6e0f0e51d450aa46c8746

经典爬虫:用Scrapy爬取百度股票相关推荐

  1. python爬虫之Scrapy爬取股票信息的示例

    python爬虫之Scrapy的使用步骤 首先讲讲教程的例子,还是以百度股票为例子进行讲解 Scrapy的使用步骤 建立工程和Spider模版 编写Spider 编写ITEM Pipelines 前请 ...

  2. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

  3. python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息

    原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...

  4. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...

  5. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...

  6. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  7. python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

  8. 三十一、Scrapy爬取百度图片

    @Author:Runsen Runsen近段时间进入Scrapy,写了几个爬虫练练手,就找百度图片入手了.本文就是Scrapy的入门文章. 文章目录 目标 创建项目 分析逻辑 代码 目标 爬取 百度 ...

  9. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

最新文章

  1. Spring源码分析篇(一)之Gradle环境搭建
  2. FE.ES-异步编程进化史
  3. 在人脸识别的时候,一定要穿上衣服啊!
  4. 阿里面试:索引失效的场景有哪些?索引何时会失效?
  5. Android 计步功能-简单实现
  6. 使用uni-app报错this.setData is not a function
  7. The Power of Android Action Bars(转载)
  8. trie树 Codeforces Round #367 D Vasiliy's Multiset
  9. RTP 时间戳的处理
  10. 墙面有几种装修方法_墙面怎么装修?这五个方案供你选择
  11. matlab中的矩阵元素错位,matlab – 如何将矩阵中较弱元素附近的弱元素归零?
  12. python中什么是句柄_python中的句柄操作的方法示例
  13. 第五十六回 曹操大宴铜雀台  孔明三气周公瑾
  14. Ruby ERB注入反序列化
  15. 非常受大学生欢迎的公众号
  16. 安装MATLAB_R2013b_X64_x32激活及破解方法
  17. 一年卖出1500万支的钟薛高,正在通过企业微信和顾客“社交”
  18. 固态盘到底该怎么做Raid?
  19. 我的 Docker 卡死了,怎么办?在线等
  20. 岩棉夹芯板英标BS476-20BS476-22耐火测试

热门文章

  1. Java绘制基本图形
  2. cached过高导致内存溢出 java head space
  3. UIButton 未响应原因分析
  4. 【撸码师读书笔记】 大型网站技术架构——核心原理与案例分析
  5. 汉字的理据与造字取向
  6. SCOM2012部署系列之九:部署审核收集报告(ACSReporting)
  7. 【经验总结】C#常用线程同“.NET研究”步方法应用场景和实现原理
  8. 【面试 struts2】【第三篇】struts2的问题
  9. 二、数据库的基本操作
  10. ASP.NET MVC 的 WebGrid 的 6 个重要技巧 【已翻译100%】