摘要:技术路线爬虫框架语言由于在上一篇博客中已经介绍了股票信息爬取的原理,在这里不再进行过多介绍,如需了解可以参考博客链接描述,在本篇文章中主要讲解该项目在框架中如何实现。
简介
目标: 获取上交所和深交所所有股票的名称和交易信息。
输出: 保存到文件中。
技术路线:Scrapy爬虫框架
语言: python3.5
由于在上一篇博客中已经介绍了股票信息爬取的原理,在这里不再进行过多介绍,如需了解可以参考博客:链接描述,在本篇文章中主要讲解该项目在Scrapy框架中如何实现。
Scrapy框架如下图所示:
我们主要进行两步操作:
(1) 首先需要在框架中编写一个爬虫程序spider,用于链接爬取和页面解析;
(2) 编写pipelines,用于处理解析后的股票数据并将这些数据存储到文件中。
步骤:
(1) 建立一个工程生成Spider模板
打开cmd命令行,定位到项目所放的路径,输入:scrapy startproject BaiduStocks,此时会在目录中新建一个名字为BaiduStocks的工程。再输入:cd BaiduStocks进入目录,接着输入:scrapy genspider stocks baidu.com生成一个爬虫。之后我们可以在spiders/目录下看到一个stocks.py文件,如下图所示:
(2) 编写Spider:配置stocks.py文件,修改返回页面的处理,修改对新增URL爬取请求的处理
打开stocks.py文件,代码如下所示:
# -*- coding: utf-8 -*- import scrapy class StocksSpider(scrapy.Spider): name = "stocks" allowed_domains = ["baidu.com"] start_urls = ["http://baidu.com/"] def parse(self, response): pass
将上述代码修改如下:
# -*- coding: utf-8 -*- import scrapy import re class 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(r"[s][hz]d{6}", href)[0] url = "https://gupiao.baidu.com/stock/" + stock + ".html" yield scrapy.Request(url, callback=self.parse_stock) except: continue def parse_stock(self, response): infoDict = {} stockInfo = response.css(".stock-bets") name = stockInfo.css(".bets-name").extract()[0] keyList = stockInfo.css("dt").extract() valueList = stockInfo.css("dd").extract() for i in range(len(keyList)): key = re.findall(r">.*", keyList[i])[0][1:-5] try: val = re.findall(r"d+.?.*", valueList[i])[0][0:-5] except: val = "--" infoDict[key]=val infoDict.update( {"股票名称": re.findall("s.*(",name)[0].split()[0] + re.findall(">.*<", name)[0][1:-1]}) yield infoDict
(3) 配置pipelines.py文件,定义爬取项(Scraped Item)的处理类
打开pipelinse.py文件,如下图所示:
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don"t forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html class BaidustocksPipeline(object): def process_item(self, item, spider): return item
对上述代码修改如下:
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don"t forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html class BaidustocksPipeline(object): def process_item(self, item, spider): return item #每个pipelines类中有三个方法 class BaidustocksInfoPipeline(object): #当一个爬虫被调用时,对应的pipelines启动的方法 def open_spider(self, spider): self.f = open("BaiduStockInfo.txt", "w") #一个爬虫关闭或结束时的pipelines对应的方法 def close_spider(self, spider): self.f.close() #对每一个Item项进行处理时所对应的方法,也是pipelines中最主体的函数 def process_item(self, item, spider): try: line = str(dict(item)) + " " self.f.write(line) except: pass return item
(4) 修改settings.py,是框架找到我们在pipelinse.py中写的类
在settings.py中加入:
# Configure item pipelines # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { "BaiduStocks.pipelines.BaidustocksInfoPipeline": 300, }
到这里,程序就完成了。
(4) 执行程序
在命令行中输入:scrapy crawl stocks
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25596.html
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:今天为大家整理了个爬虫项目。地址新浪微博爬虫主要爬取新浪微博用户的个人信息微博信息粉丝和关注。代码获取新浪微博进行登录,可通过多账号登录来防止新浪的反扒。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天为大家整...
摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...
摘要:所以如果对爬虫有一定基础,上手框架是一种好的选择。缺少包,使用安装即可缺少包,使用安装即可上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---9、APP爬取相关库的安装:Appium的安装下一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis 我们直接...
阅读 861·2021-09-29 09:35
阅读 1220·2021-09-28 09:36
阅读 1486·2021-09-24 10:38
阅读 1017·2021-09-10 11:18
阅读 607·2019-08-30 15:54
阅读 2476·2019-08-30 13:22
阅读 1928·2019-08-30 11:14
阅读 664·2019-08-29 12:35