经典爬虫:用Scrapy爬取百度股票
前言
今天我们编写一个用 Scrapy 框架来爬取百度股票的代码,之前写过一篇爬取百度股票的文章(点我),代码的逻辑和这篇文章的逻辑是一样的,用到的解析器不同罢了。
Scrapy 爬虫框架
Scrapy 爬虫框架是由 7+2 的结构构成: 引擎(Scrapy Engine) 、调度器(Schedule)、下载器(Downloader) 、爬虫(Spider) 、项目通道(Item Pipeline) 和 下载中间器(Downloader Middlewares) 、爬虫中间器(Spider Middlewares) 。
Scrapy 中的数据流(Data flow)由执行引擎控制,如下所示:
- 引擎 从 Spider 中获得需要爬取初始的 Requests 。
- 引擎 在 调度器 中调度 Requests 并询问下一个需要爬取的 Requests 。
- 调度器 向 引擎 返回下一个要爬取的 Requests。
- 引擎 通过 下载中间器 把这个 Requests 传递给 下载器 。
- 一旦页面下载完毕,下载器 生成一个 Response (包含那个页面),并通过 下载中间件 把它传递给引擎。
- 引擎 从 下载器 中接收 Response ,通过 爬虫中间件 的处理传递给 Spider 。
- Spider 处理完 Response 后,通过 爬虫中间件 向 引擎 返回生成的 items 和新的 Requests (如果有的话)。
- 引擎 把 items 传递给 Item Pipelines ,并把处理过的 Requests 传递给 调度器 ,询问新的 requests。
- 程序从步骤 1 开始重复,直到 调度器 中不再有更多的请求为止。
更多 Scrapy 信息参考官方文档:
URL:https://scrapy.org/
创建 Scrapy 项目
在电脑配置好 Scrapy 后,
在 D 盘 创建名为 pycodes 的文件夹。
打开 cmd 命令窗口,进入 D 盘 根目录后键入:
- cd d:pycodes 进入目录。
- scrapy startproject BaiduStocks 创建名为 BaiduStocks 的目录。
- cd BaiduStocks 进入项目目录。
- scrapy genspider stocks baidu.com 创建一个名为 stocks 的 .py 文件,爬虫的初始 URL 为 baidu.com 。
- 在 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爬取百度股票相关推荐
- python爬虫之Scrapy爬取股票信息的示例
python爬虫之Scrapy的使用步骤 首先讲讲教程的例子,还是以百度股票为例子进行讲解 Scrapy的使用步骤 建立工程和Spider模版 编写Spider 编写ITEM Pipelines 前请 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...
- python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息
原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...
- Python爬虫实战之爬取百度贴吧帖子
Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...
- python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...
crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...
- 三十一、Scrapy爬取百度图片
@Author:Runsen Runsen近段时间进入Scrapy,写了几个爬虫练练手,就找百度图片入手了.本文就是Scrapy的入门文章. 文章目录 目标 创建项目 分析逻辑 代码 目标 爬取 百度 ...
- 【爬虫】Scrapy爬取腾讯社招信息
目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...
最新文章
- Spring源码分析篇(一)之Gradle环境搭建
- FE.ES-异步编程进化史
- 在人脸识别的时候,一定要穿上衣服啊!
- 阿里面试:索引失效的场景有哪些?索引何时会失效?
- Android 计步功能-简单实现
- 使用uni-app报错this.setData is not a function
- The Power of Android Action Bars(转载)
- trie树 Codeforces Round #367 D Vasiliy's Multiset
- RTP 时间戳的处理
- 墙面有几种装修方法_墙面怎么装修?这五个方案供你选择
- matlab中的矩阵元素错位,matlab – 如何将矩阵中较弱元素附近的弱元素归零?
- python中什么是句柄_python中的句柄操作的方法示例
- 第五十六回 曹操大宴铜雀台 孔明三气周公瑾
- Ruby ERB注入反序列化
- 非常受大学生欢迎的公众号
- 安装MATLAB_R2013b_X64_x32激活及破解方法
- 一年卖出1500万支的钟薛高,正在通过企业微信和顾客“社交”
- 固态盘到底该怎么做Raid?
- 我的 Docker 卡死了,怎么办?在线等
- 岩棉夹芯板英标BS476-20BS476-22耐火测试