利用Scrapy对接Seleniumr的方法实现爬取网站(新浪财经上海A股股票) 的股票信息,将爬取到的数据保存到csv文件并输出。爬取的数据包括:代码,名称,最新价,买入,卖出,昨收,今开,最高,最低,成交量/手,成交额/万,振幅,换手率,市净率,市盈率,总股本,流通股。爬取网址:https://vip.stock.finance.sina.com.cn/mkt/#sh_a 要求如下: (1) 创建Scrapy项目,命名为Stock,并在PyCharm中打开。 (2) 在items.py文件中,创建一个StockItem类添加Item数据; (3) 使用模板创建一个爬虫stock.py文件; (4) 在stock.py文件中,修改url地址和parse方法爬取数据; (5) 在middleware.py中添加process_request方法使用Selenium爬取网站信息; (6) 在settings.py文件中,添加管道信息、下载器信息,以及默认的请求头信息。 (7) 运行“scrapy crawl stock -o stock.csv”命令输出信息到文件。

时间: 2023-06-19 15:03:52 浏览: 43
对接Scrapy和Selenium,实现爬取新浪财经上海A股股票信息,可以按照以下步骤进行: 1. 创建Scrapy项目 打开终端,执行以下命令创建Scrapy项目: ``` scrapy startproject Stock ``` 2. 在items.py文件中添加Item数据 打开Stock项目,进入items.py文件,添加以下代码: ``` import scrapy class StockItem(scrapy.Item): code = scrapy.Field() # 代码 name = scrapy.Field() # 名称 latest_price = scrapy.Field() # 最新价 buy = scrapy.Field() # 买入 sell = scrapy.Field() # 卖出 yesterday_close = scrapy.Field() # 昨收 today_open = scrapy.Field() # 今开 highest = scrapy.Field() # 最高 lowest = scrapy.Field() # 最低 volume = scrapy.Field() # 成交量/手 turnover = scrapy.Field() # 成交额/万 amplitude = scrapy.Field() # 振幅 turnover_rate = scrapy.Field() # 换手率 pb_ratio = scrapy.Field() # 市净率 pe_ratio = scrapy.Field() # 市盈率 total_capital = scrapy.Field() # 总股本 circulating_capital = scrapy.Field() # 流通股 ``` 3. 创建爬虫文件 在Stock项目中,执行以下命令创建爬虫文件: ``` scrapy genspider stock https://vip.stock.finance.sina.com.cn/mkt/#sh_a ``` 生成的stock.py文件中,修改parse方法如下: ``` def parse(self, response): # 获取所有股票代码和名称 codes = response.xpath('//div[@id="quotesearch"]/ul[@class="stockUL"]/li/a/text()') for code in codes: item = StockItem() item['code'] = code.extract().split(' ')[0] item['name'] = code.extract().split(' ')[1] # 构造股票信息的url url = 'https://finance.sina.com.cn/realstock/company/{}/nc.shtml'.format(item['code']) # 构造SeleniumRequest yield SeleniumRequest(url=url, callback=self.parse_stock, meta={'item': item}) def parse_stock(self, response): item = response.meta['item'] # 解析股票信息 item['latest_price'] = response.xpath('//div[@class="stock-bets"]/div[@class="price"]/strong/text()').get() item['buy'] = response.xpath('//dt[text()="买入"]/following-sibling::dd[1]/text()').get() item['sell'] = response.xpath('//dt[text()="卖出"]/following-sibling::dd[1]/text()').get() item['yesterday_close'] = response.xpath('//dt[text()="昨收"]/following-sibling::dd[1]/text()').get() item['today_open'] = response.xpath('//dt[text()="今开"]/following-sibling::dd[1]/text()').get() item['highest'] = response.xpath('//dt[text()="最高"]/following-sibling::dd[1]/text()').get() item['lowest'] = response.xpath('//dt[text()="最低"]/following-sibling::dd[1]/text()').get() item['volume'] = response.xpath('//dt[text()="成交量"]/following-sibling::dd[1]/text()').get() item['turnover'] = response.xpath('//dt[text()="成交额"]/following-sibling::dd[1]/text()').get() item['amplitude'] = response.xpath('//dt[text()="振幅"]/following-sibling::dd[1]/text()').get() item['turnover_rate'] = response.xpath('//dt[text()="换手率"]/following-sibling::dd[1]/text()').get() item['pb_ratio'] = response.xpath('//dt[text()="市净率"]/following-sibling::dd[1]/text()').get() item['pe_ratio'] = response.xpath('//dt[text()="市盈率"]/following-sibling::dd[1]/text()').get() item['total_capital'] = response.xpath('//dt[text()="总股本"]/following-sibling::dd[1]/text()').get() item['circulating_capital'] = response.xpath('//dt[text()="流通股"]/following-sibling::dd[1]/text()').get() yield item ``` 4. 添加middleware 打开Stock项目,进入middlewares.py文件,添加以下代码: ``` from scrapy import signals from scrapy.http import HtmlResponse from selenium import webdriver from selenium.webdriver.chrome.options import Options import time class SeleniumMiddleware(object): @classmethod def from_crawler(cls, crawler): middleware = cls() crawler.signals.connect(middleware.spider_opened, signals.spider_opened) crawler.signals.connect(middleware.spider_closed, signals.spider_closed) return middleware def spider_opened(self, spider): options = Options() options.add_argument('--headless') self.driver = webdriver.Chrome(options=options) def spider_closed(self, spider): self.driver.quit() def process_request(self, request, spider): self.driver.get(request.url) time.sleep(2) return HtmlResponse(url=request.url, body=self.driver.page_source, request=request, encoding='utf-8') ``` 5. 修改settings.py 打开Stock项目,进入settings.py文件,添加以下代码: ``` ITEM_PIPELINES = { 'Stock.pipelines.StockPipeline': 300, } DOWNLOADER_MIDDLEWARES = { 'Stock.middlewares.SeleniumMiddleware': 543, } DEFAULT_REQUEST_HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Accept-Language': 'en', } ``` 6. 添加pipeline 打开Stock项目,进入pipelines.py文件,添加以下代码: ``` import csv class StockPipeline(object): def __init__(self): self.file = open('stock.csv', 'w', newline='', encoding='utf-8') self.writer = csv.writer(self.file) self.writer.writerow(['代码', '名称', '最新价', '买入', '卖出', '昨收', '今开', '最高', '最低', '成交量/手', '成交额/万', '振幅', '换手率', '市净率', '市盈率', '总股本', '流通股']) def process_item(self, item, spider): self.writer.writerow([item['code'], item['name'], item['latest_price'], item['buy'], item['sell'], item['yesterday_close'], item['today_open'], item['highest'], item['lowest'], item['volume'], item['turnover'], item['amplitude'], item['turnover_rate'], item['pb_ratio'], item['pe_ratio'], item['total_capital'], item['circulating_capital']]) return item def close_spider(self, spider): self.file.close() ``` 7. 运行爬虫 在Stock项目中,执行以下命令运行爬虫: ``` scrapy crawl stock -o stock.csv ``` 运行结果会保存在当前目录下的stock.csv文件中。

相关推荐

最新推荐

recommend-type

Python爬虫实例——scrapy框架爬取拉勾网招聘信息

主要介绍了Python爬虫实例——scrapy框架爬取拉勾网招聘信息的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
recommend-type

python爬虫框架scrapy实战之爬取京东商城进阶篇

主要给大家介绍了利用python爬虫框架scrapy爬取京东商城的相关资料,文中给出了详细的代码介绍供大家参考学习,并在文末给出了完整的代码,需要的朋友们可以参考学习,下面来一起看看吧。
recommend-type

Python爬虫之Scrapy(爬取csdn博客)

本博客介绍使用Scrapy爬取博客数据(标题,时间,链接,内容简介)。首先简要介绍Scrapy使用,scrapy安装自行百度安装。 创建爬虫项目 安装好scrapy之后,首先新建项目文件:scrapy startproject csdnSpider 创建...
recommend-type

基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码(高分优秀项目)

基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~
recommend-type

setuptools-68.2.1-py3-none-any.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。