您当前的位置: 首页 >  scrapy

嗨学编程

暂无认证

  • 1浏览

    0关注

    1405博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

嗨学编程 发布时间:2019-07-02 15:26:54 ,浏览量:1

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

简介

目标: 获取上交所和深交所所有股票的名称和交易信息。输出: 保存到文件中。技术路线:Scrapy爬虫框架语言: python3.5

原理分析

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
'''
遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载!
'''
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('\>.*\            
关注
打赏
1663681728
查看更多评论
0.0560s