股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授

股票数据Scrapy爬虫

本文对中国大学慕课上《Python网络爬虫与信息提取》课程中的最后一个实例”股票数据Scrapy爬虫”给出了具体的更新后的实现步骤。

import re
import scrapy

class StocksSpider(scrapy.Spider):
    name = 'stocks'
    start_urls = ['http://quote.stockstar.com/stock/stock_index.htm']

    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.search(r'/gs/sh_\d{6}.shtml', href).group(0).split('_')[1].split('.')[0]
                url = "http://quotes.money.163.com/" + '0' + stock + '.html'
                yield scrapy.Request(url=url, callback=self.parse_stock)
            except:
                continue

    def parse_stock(self, response):
        infoDict = {}
        script = response.xpath('//div[@class="relate_stock clearfix"]/script[1]').extract()
        info = script[0].strip().split(',')
        infoDict['股票名称'] = eval(re.search(r'name\: \'.*\'', info[0]).group(0).split(':')[1])
        infoDict['股票代码'] = eval(re.search(r'code\: \'\d{6}\'', info[1]).group(0).split(":")[1])
        infoDict['现价'] = eval(re.search(r'price\: \'.*\'', info[2]).group(0).split(":")[1])
        infoDict['涨跌幅'] = re.search(r'change\: \'.*%', info[3]).group(0).split("'")[1]
        infoDict['昨收'] = eval(re.search(r'yesteday\: \'.*\'', info[4]).group(0).split(":")[1])
        infoDict['今开'] = eval(re.search(r'today\: \'.*\'', info[5]).group(0).split(":")[1])
        infoDict['最高'] = eval(re.search(r'high\: \'.*\'', info[6]).group(0).split(":")[1])
        infoDict['最低'] = eval(re.search(r'low\: \'.*\'', info[7]).group(0).split(":")[1])
        yield infoDict

(2)打开”pipelines.py”文件,修改代码,如下所示:


class ScrapystocksPipeline(object):
    def process_item(self, item, spider):
        return item

class ScrapystocksInfoPipeline(object):
    def open_spider(self, spider):
        self.f = open('ScrapyStockInfo.txt', 'w')

    def close_spider(self, spider):
        self.f.close()

    def process_item(self, item, spider):
        try:
            line = str(dict(item)) + '\n'
            self.f.write(line)
        except:
            pass
        return item

(3)打开”settings.py”文件,修改部分代码,如下所示:

原代码:

修改后:去掉注释,修改pipeline类名称

ITEM_PIPELINES = {
    'Stocks.pipelines.ScrapystocksInfoPipeline': 300,
}
  • 也可以直接在Pycharm中打卡整个项目,通过Terminal执行命令”scrapy crawl stocks”,如图所示:
    股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授
    股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授
    到此,整个爬虫就结束了。

Original: https://blog.csdn.net/weixin_45773716/article/details/113727595
Author: 腻腻不腻
Title: 股票数据Scrapy爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/789531/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球