股票数据爬虫(Scrapy框架与requests-bs4-re技术路线)

本文介绍了使用Scrapy框架和requests、BeautifulSoup库来爬取股票数据的过程,包括安装、框架结构、创建Spider、编写Pipelines、获取股票列表和个股信息的步骤,最终将数据存储为txt文档。文章详细讲解了每个步骤,包括解决安装问题、爬取股票列表和个股详情,以及数据处理与存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scrapy

中文名:抓取

一个功能强大、快速、优秀的第三方库

它是软件结构与功能组件的结合,可以帮助用户快速实现爬虫。

Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

框架安装

使用管理员权限启动command控制台

\>pip install scrapy

测试安装

输入指令查看所有scrpy命令

\>scrapy -h

出现以下界面则可视为安装成功

我们还可以通过指令查看帮助信息:

\>scrapy --help

命令提示符输出如下:


Scrapy框架常用命令:

我们本次实验只用到了startprojectgenspidercrawl命令

Scrapy“5+2”框架结构

5个主体部分:

  已有的功能实现:

                 Engine 控制模块间的数据流、根据条件触发事件

                 Schedule 对所有爬取请求进行调度

                 Downloader 根据请求下载网页

  需要配置实现:

                 Spiders 解析返回的响应、产生爬取项与新的爬取请求 

                 Item Pipelines 清理、检验和查重爬取项中的数据与数据存储

2个中间键(可配置)

                SpiderMiddleware 修改、丢弃、新增请求或爬取项 

                 Downloader Middleware 修改、丢弃、新增请求或响应

1.  SpidersEngine发送网页信息爬取请求     

2.  SchedulerEngine接收爬取请求并进行调度

3,4.  EngineScheduler获得下一个网页信息爬取请求,通过中间键发送给Downloader

5,6.  Downloader连接互联网爬取网页内容,形成响应(爬取内容)通过中间键与Engine发送给Spiders

7.  Spiders处理获得的响应(爬取内容),形成爬取项与新的网页信息爬取请求发送给Engine

8.  Engine将爬取项发送给Item Pipelines,将新的爬取请求发送给Scheduler进行调度,形成循环为数据处理与再次启动爬虫进行爬取提供数据。

功能概述:

·      技术:Scrapy
·      目标:获取上交所和深交所的股票名称与交易信息
·      输出:txt文档

获取股票列表:

·      东方财富网:http://quote.eastmoney.com/stocklist.html

获取个股信息:

·      股市通:https://gupiao.baidu.com/stock/sz002338.html

过程概述:

1.   编写spider爬虫处理链接的爬取和网页解析

2.   编写pipeline处理解析后的股票数据并存储

具体流程

·      相关安装

使用管理员权限启动command控制台

\>pip install requests

\>pip install scrapy

====================================

接下来的工程我刚开始运行失败,后通过以下四步才得以运行

(视个人情况而定)

#先卸载scrapy框架

1. pip uninstall scrapy  

#再卸载twisted框架

2. pip uninstall twisted 

重新安装scrapy以及16.6.0版本的twisted

 #先安装twisted框架

3. pip install twisted==16.6.0  

#再安装scrapy--no-deps指不安装依赖的twisted

4. pip  install scrapy--no-deps 

如仍不能运行可能需要安装pywin32模块

\>pip install pywin32

·      建立工程和Spider模板


1. 转到目标目录

\>d:
\>cd pycodes

:目录位置不限定)

2. 生成BaiduStocks项目

\>scrapy startproject BaiduStocks

3. 修改当前目录

\>cd BaiduStocks

4. 生成stocks爬虫

\>scrapy genspider stocks baidu.com

·      编写spider

配置stocks.py

修改对返回页面与新增的URL爬取请求的处理,使其解析返回的信息

  1. import scrapy  
  2. import re  # 引入正则表达式库  
  3.   
  4.   
  5. class StocksSpider(scrapy.Spider):  
  6.     name = "stocks"  
  7.     # 设置初始链接为股票列表页面链接  
  8.     start_urls = ['http://quote.eastmoney.com/stocklist.html']  
  9.   
  10.   
  11.     def parse(self, response):  # 获取页面中股票代码并生成对应股票页面链接  
  12.         # for循环提取页面中所有<a>标签中的链接  
  13.         for href in response.css('a::attr(href)').extract():  
  14.             # 使用try...except忽略错误信息  
  15.             try:  
  16.                 # 通过正则表达式获取股票代码  
  17.                 stock = re.findall(r"[s][hz]\d{6}", href)[0]  
  18.                 # 生成对应股票代码的页面链接  
  19.                 url = 'https://gupiao.baidu.com/stock/' + stock + '.html'  
  20.                 # 使用yield将函数定义为生成器将新请求重新提交给scrapy  
  21.                 yield scrapy.Request(url, callback=self.parse_stock)  
### 推荐的基础爬虫框架及其特点 对于初学者来说,选择一个易于上手且功能强大的爬虫框架至关重要。以下是几种适合基础学习的爬虫框架: #### 1. **Feapder** Feapder 是近年来备受关注的一个轻量级爬虫框架,它设计简洁,文档清晰,非常适合新手入门[^1]。该框架支持多种爬取模式,包括单线程、多线程以及分布式爬取,并内置了丰富的功能模块,如代理池管理、重试机制等。 #### 2. **BeautifulSoup (配合 Requests 使用)** 虽然 BeautifulSoup 并不是一个完整的爬虫框架,但它是一个非常优秀的 HTML 和 XML 解析库,常 `requests` 库一起使用来构建简单的爬虫程序[^3]。这种方式简单易懂,特别适合刚接触爬虫的新手。 ```python from bs4 import BeautifulSoup import requests url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 提取页面中的所有链接 links = soup.find_all('a') for link in links: print(link.get('href')) ``` #### 3. **Scrapy** 尽管 Scrapy 学习曲线稍陡,但对于希望深入掌握爬虫技术的人来说,这是一个不可忽视的强大工具[^5]。Scrapy 支持异步请求处理,能够高效地抓取大量数据,并提供了完善的扩展性和插件体系。如果时间允许,建议逐步熟悉其核心概念和工作流程。 #### 4. **Pyppeteer / Selenium** 当目标网页涉及动态加载内容时,基于浏览器自动化操作的 Pyppeteer 或 Selenium 成为理想的选择。这些工具模拟真实用户的浏览行为,从而轻松应对 JavaScript 渲染后的复杂场景。 ```python from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') content = await page.content() # 获取整个HTML内容 await browser.close() if __name__ == '__main__': import asyncio asyncio.run(main()) ``` --- ### 如何获取基础爬虫框架教程? 针对不同层次的学习者,网上有许多优质的免费资源可供参考: - 如果倾向于系统化教学,则可查阅 B 站上的 Python 教程系列视频; - 对于更具体的实践指导,《Python 所有方向的学习路线图》《历年互联网企业 Python 面试题》等内容也极具价值[^2][^4]。 此外,在实际动手过程中遇到任何困难都可以随时查询官方文档或者社区论坛寻求帮助。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值