跌跌撞撞尝试Scrapy+Selenium+MySQL爬取与存储东方财富网股票数据

本文介绍如何使用Scrapy框架结合Selenium和MySQL,爬取东方财富网的沪股通和深股通实时数据。通过stock_spider.py等文件定义爬虫逻辑,items.py设置字段,middlewares.py配置Selenium中间件,pipelines.py处理数据,但遇到大约5分钟后爬虫自动停止的问题,可能涉及网页限制或Selenium设置。详细代码可在GitHub找到。
摘要由CSDN通过智能技术生成

网页信息

打开东方财富网首页,切换至东方财富网 > 行情中心 > 沪深港通 > 沪股通/深股通切换至网站,主要包含当天的沪股和深股的实时情况,属于动态网页,使用scrapy配合selenium可以完成表格数据的爬取。

爬虫框架

stock_spider.py(爬虫文件)

import scrapy,time
from stock.items import StockItem
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ChromeOptions

class StockSpider(scrapy.Spider):
    name = 'stock'
    # 允许爬取的域名
    allowed_domains = ['quote.eastmoney.com']
    # 爬虫的起始网页
    start_urls = ['http://quote.eastmoney.com/center/gridlist.html#sh_hk_board']

    def __init__(self):
        # 因为东方财富网行情表为相同网站下爬取不同页的数据
        # 定义网站页码变量
        self.page = 1
        # 手动定义最大页码,暂时还没有编写从网页自行获取
        self.max_page = 0
        # 爬取网页的列表索引
        self.index = 0
        # 辅助判断沪股还是深股
        self.name = ''
        self.nm = ''
        # 定义标签页的句柄
        self.first_h = None
        # 爬取网页列表
        self.url_list = ["http://quote.eastmoney.com/center/gridlist.html#sh_hk_board",
                    "http://quote.eastmoney.com/center/gridlist.html#sz_hk_board"]

        super(StockSpider, self).__init__(name='stock')
        # 定义模拟浏览器的路径
        chrome = '/home/zcreset/Scrapy/爬虫/chromedriver'
        # 设置无头爬取模式,即后台运行,无界面显示
        # chorme_options = ChromeOptions()
        # chorme_options.add_argument("--headless")
        # chorme_options.add_argument('--disable-gpu')
        # self.driver = webdriver.Chrome(executable_path=chrome,chrome_options=chorme_options)
        
        # 给爬虫设置Chrome浏览器
        self.driver = webdriver.Chrome(executable_path=chrome)

    def start_requests(self):
        url = self.url_list[self.index]
        self.name = url.split('#')[-1][:2]
        self.driver.get(url)
        # 获取当前标签页句柄
        self.first_h = self.driver.current_window_handle
        # 在当前标签页进行爬取请求
        yield scrapy.Request(url, callback=self.parse, dont_filter= True)

    # 定义如何存百度的单个页面中提取信息的方法
    def parse(self, response):
        # 调用字段函数创建数据存储字典
        # 暂时手动是手动记录最大页码
        Item = StockItem()
        # 判断股票归属地
        if self.name == 'sh':
            self.max_page 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值