Scrapy爬虫基本使用与股票数据Scrapy爬虫

news2024/10/7 6:46:17

Scrapy爬虫的常用命令 

scrapy命令行格式

 红色是常用的三种命令

为什么Scrapy采用命令行创建和运行爬虫?

命令行(不是图形界面)更容易自动化,适合脚本控制 本质上,Scrapy是给程序员用的,功能(而不是界面)更重要

Scrapy爬虫的基本使用

应用Scrapy爬虫框架主要是编写配置型代码

步骤1:建立一个Scrapy爬虫工程

选取一个目录,然后执行如下命令

scrapy startproject python123demo

 步骤2:在工程中产生一个Scrapy爬虫

在工程中产生一个Scrapy爬虫,只需要执行一条命令就可以了,但这个命令是需要约定用户给定的爬虫的名字以及爬取的网站

 进入工程目录,然后执行如下命令:

scrapy genspider demo python123.io

这条命令指的是生成一个名称为demo的spider

当然,我们也可以手动的生产

name = "demo" 爬虫的名称
allowed_domains = ["python123.io"] 最开始用户提交给命令行的域名,指的是爬虫在爬取网站的时候,它只能爬取这个域名以下的相关链接
start_urls = ["http://python123.io/"] 以列表形式包含的一个或多个域名就是scrapy框架所要爬取页面的初始页面
def parse(self, response):parse()用于处理响应,解析内容形成字典, 发现新的URL爬取请求

 步骤3:配置产生的spider爬虫

配置:(1)初始URL地址 (2)获取页面后的解析方式

 步骤4:运行爬虫,获取网页 在命令行下,执行如下命令:

scrapy crawl demo

这里一定要注意:把目录切换到当前目录下,因为它要执行demo.py命令

 这里,还要注意的一点:就是一定要在spiders目录下的demo.py文件下写 

 运行之后,如果打印的日志出现 [scrapy] INFO: Spider closed (finished),代表执行完成。 之后当前文件夹中就出现了一个 demo.html 文件,里面就是我们刚刚要爬取的网页的全部源代码信息。

 

yield关键字的使用

 按照生成器的说法,它首先执行for循环,然后执行到yield这行语句的时候,这个函数就会被冻结,而当前yield对应的那一行产生值会被返回出来,所以这个函数在调用的时候,它会首先产生一个值,这个值就是当i等于0的时候的值的平方值,之后会逐渐遍历这个循环        

 

使用yield关键字 就不会报错,而使用return只能执行一次,报错。yield可以一次性的唤醒所有的数值

 

 好处就是如果我们使用原生的办法,我们需要将这些数据全都统计出来,很占空间,而yield只占用一个元素的空间

Scrapy爬虫的基本使用

Scrapy爬虫数据类型

 

 

 

股票数据Scrapy爬虫 

功能描述

目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中

数据网站的确定

获取股票列表:

行情中心:国内快捷全面的股票、基金、期货、美股、港股、外汇、黄金、债券行情系统_东方财富网

行情中心_股市行情_最新股市行情_股市走势-雪球 (xueqiu.com)

这是一个使用Scrapy框架编写的Python脚本,旨在从一个网站上爬取有关股票的信息。

  1. 脚本导入了Scrapy和BeautifulSoup模块,以及re模块。
  2. StockSpider类是一个Spider类的子类,用于定义爬虫的行为。在该类中,name属性定义了爬虫的名称,start_urls属性定义了爬虫起始爬取的网址。
  3. parse方法是默认的回调函数,用于处理响应。在该方法中,使用response.css方法获取响应中所有a标签的href属性值,然后使用正则表达式提取股票代码。如果提取到股票代码,则构造股票详情页的URL,并发送一个请求,使用parse_stock方法作为回调函数。
  4. parse_stock方法用于处理股票详情页的响应。在该方法中,使用正则表达式和BeautifulSoup库解析响应中的HTML,提取股票名称和详细信息。最后,将信息以字典的形式返回。

总之,这个脚本使用Scrapy和BeautifulSoup模块来爬取股票信息,包括股票名称和详细信息。

# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
import re

class StockSpider(scrapy.Spider):
    name = 'stock'
    # allowed_domains = ['quote.eastmoney.com']
    start_urls = ['http://quote.eastmoney.com/stock_list.html']

    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.search(r"[s][hz]\d{6}", href).group(0)
                stock = stock.upper()
                url = 'https://xueqiu.com/S/' + stock
                yield scrapy.Request(url, callback = self.parse_stock)
            except:
                continue

    def parse_stock(self, response):
        infoDict = {}
        if response == "":
            exit()
        try:
            name = re.search(r'<div class="stock-name">(.*?)</div>', response.text).group(1)
            infoDict.update({'股票名称': name.__str__()})
            tableHtml = re.search(r'"tableHtml":"(.*?)",', response.text).group(1)
            soup = BeautifulSoup(tableHtml, "html.parser")
            table = soup.table
            for i in table.find_all("td"):
                line = i.text
                l = line.split(":")#这里的冒号为中文的冒号(:)!!!而不是英文的(:)
                infoDict.update({l[0].__str__(): l[1].__str__()})
            yield infoDict
        except:
            print("error")

下面代码定义了两个数据处理管道类,用于在爬虫抓取到数据后对数据进行处理,具体说明如下:

  1. DemoPipeline类:这是一个空的管道类,它只是简单地将从爬虫获得的数据返回,没有对数据进行任何处理。
  2. stockPipeline类:这是一个自定义管道类,它用于将爬虫获取到的数据存储到文件中。在该类中,open_spider()方法在爬虫启动时被调用,打开一个文本文件('XueQiuStock.txt')以供写入。close_spider()方法在爬虫结束时被调用,关闭文件。process_item()方法在爬虫获得一个item时被调用,将item转换成字典形式并写入到文件中,然后将item返回。

总之,这段代码定义了两个数据处理管道类,它们分别提供了不同的处理方法来处理爬虫抓取到的数据。 DemoPipeline类只是将数据返回,而stockPipeline类将数据写入到文件中。

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


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

class stockPipeline(object):
    def open_spider(self,spider):
        self.f = open('XueQiuStock.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

下面代码是Scrapy爬虫项目的配置文件settings.py,它定义了一些爬虫的设置,包括:

  1. BOT_NAME:爬虫项目的名称,可以是任何字符串。
  2. SPIDER_MODULES和NEWSPIDER_MODULE:定义了爬虫代码所在的模块,即'spiders'目录。其中,SPIDER_MODULES是一个列表,包含了所有包含爬虫代码的模块,而NEWSPIDER_MODULE是默认的爬虫模块名称,即'spiders'。
  3. USER_AGENT:用于标识爬虫的用户代理,可以是任何字符串,这里使用了一个模拟Chrome浏览器的字符串。
  4. ROBOTSTXT_OBEY:一个布尔值,指示是否遵守robots.txt协议。如果设置为True,则爬虫将不会访问被网站禁止爬取的部分。
  5. ITEM_PIPELINES:定义了一组数据处理管道类,用于在爬虫抓取到数据后对数据进行处理。在这里,它只有一个管道类stockPipeline,并且设置了它的优先级为300,这意味着它将在其他管道类之后被执行。

# -*- coding: utf-8 -*-
BOT_NAME = 'demo'

SPIDER_MODULES = ['demo.spiders']
NEWSPIDER_MODULE = 'demo.spiders'


# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6"

# Obey robots.txt rules
ROBOTSTXT_OBEY = True

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'demo.pipelines.stockPipeline': 300,
}

效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue打包之后,可以进行修改配置后端地址、端口等信息方法

前言 用vue-cli构建的项目通常是采用前后端分离的开发模式&#xff0c;也就是前端与后台完全分离&#xff0c;此时就需要将后台接口地址打包进项目中&#xff0c;但是&#xff0c;难道我们只是改个接口地址也要重新打包吗&#xff1f;当然不行了&#xff0c;那就太麻烦了&#…

支付宝沙箱环境+SpringBoot+内网穿透整合开发

目录 1.查看沙箱账号 2.内网穿透 3.沙箱环境整合SpringBoot开发 下面我将以实际案例详细介绍如何使用沙箱环境进行支付宝支付对接的开发 1.查看沙箱账号 首先什么是沙箱账号&#xff1f; 沙箱账号是指在支付宝沙箱环境中创建的测试账户&#xff0c;用于模拟真实的支付流程…

The 2022 ICPC Asia Xian Regional Contest

题目顺序大致按照难度排序。 F. Hotel 现在酒店中有单人间和双人间&#xff0c;价格分别是c1&#xff0c;c2&#xff0c;现在有n个队&#xff0c;每队三个人&#xff0c;性别分别用字母表示&#xff0c;当两个人性别相同且在同一个队时&#xff0c;他们可以住在双人间中。求最…

【跑跑Github开源项目系列】基于YOLO和Streamlit的车辆识别系统demo

【跑跑Github开源项目系列】基于YOLO和Streamlit的车辆识别系统demo写在前面环境配置创建虚拟环境安装库项目运行写在前面 相信很多朋友跟我一样在github等平台上偷代码 (读书人的事怎么能叫偷呢) 的时候会发现伟大且无私的作者虽然开源了代码但是readme文件该写的没写&#x…

2023TYUT移动应用软件开发程序设计和填空

目录 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件 程序设计2&#xff1a;根据要求,补充Activity.java文件 程序填空 说明&#xff1a; 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件…

【C++初阶】第十篇:list模拟实现

文章目录一、list的模拟实现三个类及其成员函数接口总览结点类的模拟实现迭代器类的模拟实现迭代器类的模板参数说明迭代器operator->的重载迭代器模拟实现代码list的模拟实现无参构造函数带参构造拷贝构造函数赋值运算符重载函数析构函数begin和endinserteraselist的迭代器…

WordPress添加阿里云OSS对象云储存配置教程

背景&#xff1a;随着页面文章增多&#xff0c;内置图片存储拖连网站响应速度&#xff0c;这里对我来说主要是想提升速度 目的&#xff1a;使用第三方云存储作为图片外存储(图床)&#xff0c;这样处理可以为服务器节省很多磁盘空间&#xff0c;在网站搬家的时候减少文件迁移的工…

【数据结构】堆(笔记总结)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

MySQL--数据库基础--0406

目录 1.什么是数据库&#xff1f; 2. 基本使用 2.1 连接服务器 2.2 数据库的操作在Linux中的体现 2.3 使用案例 3.服务器&#xff0c;数据库&#xff0c;表关系 4.数据逻辑存储 5.SQL的分类 6.存储引擎 1.什么是数据库&#xff1f; 数据库和文件 文件或者数据库&…

OK-MX93开发板-实现Web页面无线点灯

上篇文章&#xff1a;i.MX9352——介绍一款多核异构开发板&#xff0c;介绍了OK-MX9352开发板的基础硬件功能。 本篇来使用OK-MX9352开发板&#xff0c;通过Web界面进行点灯测试&#xff0c;最终的效果如下&#xff1a; 在进行代码编写之前&#xff0c;先在Ubuntu虚拟机上把这…

对比损失Contrastive Loss(CVPR 2006)原理解析

paper&#xff1a;http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf 本文提出的对比损失contrastive loss被广泛应用于自监督模型中&#xff0c;但最初对比损失是作为一个特征降维方法而提出的。 摘要 降维是学习一种映射关系&#xff0c;通过这种映射关…

day10 线程池及gdb调试多线程

目录 线程池的概念 概念&#xff1a; 必要性&#xff1a; 线程池的基本结构&#xff1a; 线程池的实现 完整代码 线程的GDB调试 线程池的概念 概念&#xff1a; 通俗的讲就是一个线程的池子&#xff0c;可以循环的完成任务的一组线程集合&#xff1b; 必要性&#xff…

【软件工程】为什么要选择软件工程专业?

个人主页&#xff1a;【&#x1f60a;个人主页】 文章目录前言软件工程&#x1f4bb;&#x1f4bb;&#x1f4bb;就业岗位&#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f4bb;就业前景&#x1f6e9;️&#x1f6e9;️&#x1f6e9;️工作环…

趣谈之什么是 API 货币化?

本文介绍了 API 货币化和 APISIX 实现 API 货币化方法。 作者刘维&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Contributor 原文链接 什么是 API 货币化 想象你开发并部署了一个服务&#xff0c;能够搜集你所在城市所有超市的打折和优惠信息&#xff0c;其他的…

C生万物 | 校招热门考点 —— 结构体内存对齐

文章目录一、前言结构体偏移量计算&#xff1a;offsetof二、规则介绍例题的分解与细说三、习题演练1、练习①2、练习②四、为什么存在内存对齐?1、平台原因(移植原因)2、性能原因五、如何修改默认对齐数六、实战演练✍一道百度笔试题&#xff1a; offsetof 宏的实现&#x1f4…

深度学习基础篇之深度神经网络(DNN)

神经网络不应该看做是一个算法&#xff0c;应该看做是一个特征挖掘方法。在实际的业界发展过程中&#xff0c;数据的作用往往大于模型&#xff0c;当我们把数据的隐藏特征提取出来之后&#xff0c;用很简单的模型也能预测的很好。 神经网络模型由生物神经中得到启发。在生物神…

【Linux】Makefile的简述

目录 前言&#xff1a; 一、Makefile的规则 二、Makefile的函数语法 &#xff08;1&#xff09;通配符pattern ​&#xff08;2&#xff09; 删除clean ​&#xff08;3&#xff09; 立即变量、延时变量 &#xff08;4&#xff09; Makefile常用函数 3-1.Makefile要达到…

第11章_常用类和基础API

第11章_常用类和基础API 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 字符串相关类之不可变字符序列&#xff1a;String 1.1 String的特性 java.lang.String 类代表字符串…

vue之--使用TypeScript

搭配 TypeScript 使用 Vue​ 像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误&#xff0c;也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全&#xff0c;TypeScript 还改善了开发体验和效率。…

2023年美赛春季赛 Y题详细思路

由于今年各种各样的原因&#xff0c;导致美赛头一次&#xff0c;据说也将是最后一次&#xff0c;临时调整&#xff0c;加设春季赛。这对于急需建模奖项的大家来说是一个很好的机会。无论怎样的原因&#xff0c;今年美赛我们可能有所遗憾。但&#xff0c;春季赛也许就是弥补遗憾…