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

news/2024/7/19 8:37:18 标签: python, 爬虫, 开发语言

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.niftyadmin.cn/n/199293.html

相关文章

udig下载、安装及汉化,简单生成geoserver图层样式sld

uDig是一款开源免费的桌面地理信息系统框架软件。uDig汉化版主要采用RCP技术构建&#xff0c;内置的多专业的水文工具&#xff0c;拥有复杂专业的分析能力&#xff0c;既可以作为独立程序运行&#xff0c;还可以作为插件使用。 uDig是一个 open source (EPL and BSD) 桌面应用程…

LCP 44. 开幕式焰火

题目链接 LCP 44. 开幕式焰火 easy 题目描述 「力扣挑战赛」开幕式开始了&#xff0c;空中绽放了一颗二叉树形的巨型焰火。 给定一棵二叉树 root代表焰火&#xff0c;节点值表示巨型焰火这一位置的颜色种类。 请帮小扣计算巨型焰火有多少种不同的颜色。 示例 1&#xff1a;…

双大括号中数据简短书写

写的这么长&#xff0c;只是为了方便解释和阅读。实际上&#xff0c;在Vue模板中访问对象的属性是通过双大括号和对象属性名称的组合来实现的。如果您想访问对象datum.process_params.compressed.text.text中的文本属性&#xff0c;您可以在模板中这样写&#xff1a; {{ datum…

必须要懂的Kotlin开发技巧

string.xml资源id快速转换String 定义如下扩展属性&#xff1a; val Int.resToString: Stringget() MainApp.mApplication.getString()使用起来就很方便了:R.string.xxx.resToString View隐现设置 平常设置View显隐的方式this.visibility View.xxx有点麻烦&#xff0c;封…

SSD 存储领域厂商大普微加入龙蜥社区,完成与龙蜥操作系统适配

近日&#xff0c;深圳大普微电子科技有限公司&#xff08;简称“大普微”&#xff09;签署了CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09;&#xff0c;正式加入龙蜥社区&#xff08;OpenAnolis&#xff09;。 大普微成立于 2016 年&a…

软考网络工程师要怎么复习?

一、明确考试重点和难点 网络工程师考试主要考察网络基础知识、网络架构设计、网络安全、网络管理等方面的知识。因此&#xff0c;我们在复习的时候&#xff0c;一定要明确考试重点和难点&#xff0c;将重点知识点逐一梳理&#xff0c;逐一掌握。 二、查漏补缺 在进行复习的…

【Linux】高级IO

前言 本篇笔记记录五种IO模型的基本概念&#xff0c;重点针对多路转接IO模型对我们的网络服务器进行设计&#xff0c;从而达到提升效率的效果。 我的上一篇Linux笔记&#xff1a;【Linux】网络基础(3)_柒海啦的博客-CSDN博客 让我们开始吧~ 目录 一、五种IO模型 1.阻塞IO 2…

社区团购是什么?打破传统消费模式的新选择

社区团购作为一种新兴的消费模式&#xff0c;已经成为了越来越多人的选择。在社区团购中&#xff0c;商家可以通过团购的方式向消费者提供优惠的价格和服务&#xff0c;同时也可以借助社区团购来扩大销售渠道和提高品牌知名度。本文将以一家小型便利店的社区团购为例&#xff0…