资讯专栏INFORMATION COLUMN

爬虫框架Scrapy实战一——股票数据爬取

Ilikewhite / 2366人阅读

摘要:技术路线爬虫框架语言由于在上一篇博客中已经介绍了股票信息爬取的原理,在这里不再进行过多介绍,如需了解可以参考博客链接描述,在本篇文章中主要讲解该项目在框架中如何实现。

简介

目标: 获取上交所和深交所所有股票的名称和交易信息。
输出: 保存到文件中。
技术路线: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

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    摘要:今天为大家整理了个爬虫项目。地址新浪微博爬虫主要爬取新浪微博用户的个人信息微博信息粉丝和关注。代码获取新浪微博进行登录,可通过多账号登录来防止新浪的反扒。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天为大家整...

    jlanglang 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • Python3网络爬虫实战---10、爬虫框架的安装:PySpider、Scrapy

    摘要:所以如果对爬虫有一定基础,上手框架是一种好的选择。缺少包,使用安装即可缺少包,使用安装即可上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---9、APP爬取相关库的安装:Appium的安装下一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis 我们直接...

    张宪坤 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<