采用scrapy实现对股票网站的爬取

功能描述:

  技术路线:scrapy

  目标:获取上交所和深交所所有股票名称和交易信息并存储

实例编写:

  步骤1:建立工程和spider爬虫模板

  步骤2:编写spider

  步骤3:编写item pipeline

新建工程:

生成名为stocks的爬虫

打开IDE,将项目导入,首先我们要编辑spider文件夹下的stocks.py文件,使其能处理返回的url

  1. import scrapy
  2. import re
  3.  
  4. class StocksSpider(scrapy.Spider):
  5. name = 'stocks'
  6. start_urls = ['http://quote.eastmoney.com/stocklist.html']
  7.  
  8. def parse(self, response):
  9. for href in response.css('a::attr(href)').extract(): #将a标签中的链接进行提取
  10. try:
  11. stock = re.findall(r"[s][hz]\d{6}", href)[0] #通过正则表达式库来获取股票代码
  12. url = 'https://gupiao.baidu.com/stock/' + stock + '.html'
  13. yield scrapy.Request(url, callback=self.parse_stock) #给出了处理url的响应函数,定义出一个新的函数parse_stock
  14. except:
  15. continue
  16.  
  17. def parse_stock(self, response):
  18. infoDict = {}
  19. stockInfo = response.css('.stock-bets') #找到一个属性为stock-bets的区域
  20. name = stockInfo.css('.bets-name').extract()[0] #提取股票名字
  21. keyList = stockInfo.css('dt').extract() #提取每个dt标签
  22. valueList = stockInfo.css('dd').extract() #提取每个dd标签
  23. for i in range(len(keyList)): #遍历每对标签,提取标签的键和值,并存入列表
  24. key = re.findall(r'>.*</dt>', keyList[i])[0][1:-5]
  25. try:
  26. val =re.findall(r'\d+\.?.*</dd>', valueList[i])[0][1:-5]
  27. except:
  28. val = '--'
  29. infoDict[key] = val
  30.  
  31. infoDict.update(
  32. {'股票名称': re.findall('\s.*\(', name)[0].split()[0] + re.findall('\>.*\<', name)[0][1:-1]}
  33. ) #将页面内股票名称和代码存入列表
  34. yield infoDict #以备将列表内的信息传递给ITEM pipeline

接下来要配置pipelines.py文件,定义对爬取项的处理类

  1. class BaidustockPipeline(object):
  2. def process_item(self, item, spider):
  3. return item
  4.  
  5. class BaidustocksInfoPipeline(object):
  6. def open_spider(self, spider): #爬虫被调用时,pipeline所启用的方法
  7. self.f = open('BaiduStockInfo.txt', 'w')
  8.  
  9. def close_spider(self, spider): #爬虫关闭时,pipeline所启用的方法
  10. self.f.close()
  11.  
  12. def process_item(self, item, spider): #将每个股票的信息写入文件中
  13. try:
  14. line = str(dict(item)) + '\n'
  15. self.f.write(line)
  16. except:
  17. pass
  18. return item

在pipelines.py中定义了一个类,为了让程序能找到这个类,需要配置ITEM_PIPELINES选项

打开settings.py,找到ITEM_PIPELINES参数,删除注释号

执行命令:

  

scrapy实战的更多相关文章

  1. 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息

    简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...

  2. Python分布式爬虫开发搜索引擎 Scrapy实战视频教程

    点击了解更多Python课程>>> Python分布式爬虫开发搜索引擎 Scrapy实战视频教程 课程目录 |--第01集 教程推介 98.23MB |--第02集 windows下 ...

  3. Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)

    在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...

  4. Scrapy实战-新浪网分类资讯爬虫

    项目要求: 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 什么是Scrapy框架: Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应 ...

  5. Scrapy实战篇(八)之爬取教育部高校名单抓取和分析

    本节我们以网址https://daxue.eol.cn/mingdan.shtml为初始链接,爬取教育部公布的正规高校名单. 思路: 1.首先以上面的地址开始链接,抓取到下面省份对应的链接. 2.在解 ...

  6. Scrapy实战篇(七)之爬取爱基金网站基金业绩数据

    本篇我们以scrapy+selelum的方式来爬取爱基金网站(http://fund.10jqka.com.cn/datacenter/jz/)的基金业绩数据. 思路:我们以http://fund.1 ...

  7. scrapy实战之scrapyrt的使用

    scrapyrt为scrapy提供了一个http接口,有了它,我们不用再执行命令,而是直接请求一个http接口来启动项目,如果项目是部署在远程的,会比较方便. 1.安装: pip install sc ...

  8. Scrapy实战篇(六)之爬取360图片数据和图片

    本篇文章我们以360图片为例,介绍scrapy框架的使用以及图片数据的下载. 目标网站:http://images.so.com/z?ch=photography 思路:分析目标网站为ajax加载方式 ...

  9. Scrapy实战篇(五)之爬取历史天气数据

    本篇文章我们以抓取历史天气数据为例,简单说明数据抓取的两种方式: 1.一般简单或者较小量的数据需求,我们以requests(selenum)+beautiful的方式抓取数据 2.当我们需要的数据量较 ...

  10. Scrapy实战篇(四)爬取京东商城文胸信息

    创建scrapy项目 scrapy startproject jingdong 填充 item.py文件 在这里定义想要存储的字段信息 import scrapy class JingdongItem ...

随机推荐

  1. 第七篇:suds.TypeNotFound: Type not found: '(string, http://schemas.xmlsoap.org/soap/encoding/, )'

    想要用Python的suds模块调用webservice地址做自动测试,但是找了很多方法都失败了,最终找到另外一个模块可以作为客户端访问服务器地址. 1.针对非安全的http from zeep im ...

  2. centos7上mysql8.0rpm方式安装

    首先是下载图解 1.首先卸载centos7中自带的mariadb rpm -qa|grep mariadb //查询出来已安装的mariadb rpm -e --nodeps 文件名 //卸载mari ...

  3. php扩展开发-快速上手

    系统环境CentOS release 6.5 (Final) PHP版本php-5.6.27 扩展开发需要有php环境及php的源代码,我的PHP安装目录/home/zhangxiaomin/stud ...

  4. Python开发不可不知的虚拟环境

    一.python3.3之后自带的venv模块 1. 创建虚拟环境 python3.6 -m venv project-env 2. 加入虚拟环境目录 cd pronject-env 3. 激活虚拟环境 ...

  5. Redis实现之复制(二)

    PSYNC命令的实现 在Redis实现之复制(一)这一章中,我们介绍了PSYNC命令和它的工作机制,但一直没有说明PSYNC命令的参数以及返回值.现在,我们了解了运行ID.复制偏移量.复制积压缓冲区以 ...

  6. Falsk

    flask: 1.配置文件的几种方式: 1.app.config['DEBUG'] =True 2.app.config.from_pyfile("setting.py") 3.a ...

  7. 分治 - 计算几何 - BZOJ2458,[BeiJing2011]最小三角形

    http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个 ...

  8. Python Flask构建可拓展的RESTful API

    1-1 Flask VS Django 1-2  课程更新维护说明: 1-3 环境.开发环境与Flask: 1.3.1 关注版本更新说明: 1-4 初始化项目:

  9. DFS排列组合问题

    这四个使用DFS来求解所有组合和排列的例子很有代表性,这里做一个总结: 1.不带重复元素的子集问题 public ArrayList<ArrayList<Integer>> s ...

  10. Visual C++ 经典的人脸识别算法源代码

    说明:VC++ 经典的人脸识别算法实例,提供人脸五官定位具体算法及两种实现流程. 点击下载