[腾讯云 Cloud studio 实战训练营] 制作Scrapy Demo爬取起点网月票榜小说数据

news2024/12/25 12:38:42

首语

最近接触到了一个关于云开发的IDE,什么意思呢?

就是我们通常开发不是在电脑上吗,既要下载编译器,还要下载合适的编辑器,有的时候甚至还需要配置开发环境,有些繁琐。

而这个云开发的IDE就是只需要一台能够上网的电脑就可以进行开发,完全不需要配置环境,下载编译器和编辑器。

Cloud Studio是什么

没错,这就是那一款云开发IDE。可以在浏览器上进行代码的编写,也可以将编写好的代码上传到你的Github或者Gitee。

Cloud Studio的优势

因为之前使用过JetBrains全家桶,所以就简单说一下对比,相较于传统的IDE来说,Clould Studio不需要下载安装即可在网页上使用。

相对来说更为方便,更为难得的是,Clould Studio在更为方便快捷的前提上,对比传统IDE的功能来讲,也都是具备的。

1. 代码纠错等基础功能

我们都知道,现在的IDE对于错误的代码不需要编译就可以标红提醒,因此Clould Studio也具备这样的功能,当然,代码补全这个很实用的功能也是具备的(对于我这种记忆力不好的人来说,这个功能还是很重要的)

2. 环境搭建

对于项目的环境搭建来说,由于Clould Studio收集了众多项目模板,因此对于需要的环境可以一键搭建,主打的就是一个方便快捷

也并不需要你创办虚拟环境,重新安装类库等,直接创建开发空间,就是一个独立的项目,不需要担心不同项目之间突然,冒出来一个问题。

也不需要为学校教了多门语言而苦恼多门语言的编译器安装与环境配置问题。

当时我学习java的时候确实为了环境配置而苦恼,只能说相见恨晚呐!

3. 链接云服务器

创建的项目运行后是在类似于云服务器上跑的,web项目也可以通过外网访问,工作空间内有分配的端口号和IP,也是非常的方便。

Clould Studio是使用ssh的方式来远程连接到,我们只需要在工作空间启动项目,然后就会出现这个按钮

在这里插入图片描述

点击后就会出现ssh的链接,使用对应的工具就可以远程链接了。

在这里插入图片描述

接下来我们就讲讲如何使用Clould Studio来制作我们的Scrapy Demo。

使用Clould Studio账号创建项目Demo

1. 注册创建Clould Studio账号

打开Clould Studio官方网站进行账号的注册登录:Clould Studio官网

在官网中我们可以看到对于Clould Studio的简单介绍:

在这里插入图片描述

而我们要使用的话就可以直接点击官网右上角的注册/登录按钮

登录完成后回来到我们的工作空间(有个人和团体的)

在这里插入图片描述

2. 了解基本功能和内容

进入工作空间后,我们可以在左边看到一些木块,拢共分为三大类

  1. 开发空间——我们可以在开发空间看到我们创建的项目

  2. 空间模板——在空间模板里面有许多模板可以使用,不关你是python,java,C,vue语言,都有模板可供使用

    在这里插入图片描述

  3. 应用推荐——这里面是各位大佬制作好的项目,如果对某个项目感兴趣,想观摩源代码,我们只需要点击之后,点击Fork按钮,就可以将大佬们的项目copy到我们自己的工作空间。

    在这里插入图片描述

3. 创建Python模板

我们在空间模板中找到Python模板,然后点击一下就可以快速创建了,当然这需要一定的时间,不过时间也不长

在这里插入图片描述

我们的工作空间窗户建好之后,我们会发现自动运行了一个Demo在这里插入图片描述

而在README文件中我们也可以看到关于这个Demo的相关介绍

在这里插入图片描述

当然我们不想运行的话也是可以直接删掉的。

4. 使用pip下载Scrapy库

虽然我使用pip list命令发现已经初始化了很多类库,比如flaskpygame等比较常用的,但是Scrapy是没有的,同样的,我也并没有发现Django库,我们使用的话,最好先查看一下有没有我们需要的类库。

先将我们不需要的文件删除掉,然后打开终端

在这里插入图片描述

之后再使用我们的pip工具下载我们需要的类库pip install Scrapy

下载完成后以防万一,我们再使用pip list命令检查一下是否安装成功

在这里插入图片描述

安装成功后我们就可以开始创建项目了

5. 创建Scrapy项目

创建Scrapy项目需要在终端输出命令创建,可别下载完就把终端×了啊

Scrapy startproject 项目名

出现下图内容就是创建成果了,同样的,我们还可以直接观察我们工作空间的目录,创建完成后会出现一个与项目名称同名的目录,那就是创建成果了

6. 创建爬虫文件

还是我们的终端,打开后切换到我们的项目目录下面,开始创建爬虫文件

cd 项目名称 // 切换到项目根目录
scrapy genspider qidian_spider www.xxx.com  // 创建名字为qidian_spider,域名为www.xxx.com的爬虫文件

在这里插入图片描述

显示这样就是我们的爬虫创建成果啦,当然爬虫开始工作还需要我们编写代码,现在还需要编写代码

先打开看看怎么个事

在这里插入图片描述

import scrapy  # 使用的类库


class QidianSpiderSpider(scrapy.Spider):
    name = "qidian_spider" # 爬虫名
    allowed_domains = ["www.xxx.com"] # 通域名
    start_urls = ["https://www.xxx.com"]  #具体爬取的url

    def parse(self, response):
        #爬虫代码编写在这里
        pass

7. 确认爬取目标

爬取起点中文网月票榜上小说,获取小说名,作者名,连载状态,小说简介

我们要爬取某个网站,首先一点就是先获取到网站的URL,所以网站的URL就是:https://www.qidian.com/rank/yuepiao/

所以我们的代码中就可以修改url了

start_urls = ["https://www.xxx.com"]

修改为start_urls = ["https://www.qidian.com/rank/yuepiao/"]

8. 修改项目配置

在没学Scrapy之前,我们都需要在确认网站url后填写headers头部信息,比如user_agentcookies,那么在Scrapy中我们也需要填写这种头部信息

找到项目内的setting.py文件打开

.在这里插入图片描述

将里面的内容修改加添加一些

将20行的ROBOTSTXT_OBEY = True改为ROBOTSTXT_OBEY = False

这个的意思是是否遵循机器人协议,默认是true,需要改为false

不然我们的爬虫有很多都无法爬取

添加代码:USER_AGENT:"你自己浏览器的请求头"

9. 编写爬取代码

import scrapy


class MonthlytickrtSpider(scrapy.Spider):
    name = "qidian_spider"
    allowed_domains = ["www.qidian.com"]
    start_urls = ["https://www.qidian.com/rank/yuepiao/"]

    def parse(self, response):
        print("===============项目开始运行===============")       
        yuepiao_list = response.xpath('//div[@class="book-mid-info"]')                # 月票榜小说数据列表
        data_list = []                                                                # 创建空列表容纳每一本小说的数据
        """
        data_dic = {
                也可以创建一个字典来存储
        }
        """                                                  
        for i in yuepiao_list:
            book_name = i.xpath('h2/a/text()').extract()[0]                           # 小说名
            book_author = i.xpath('p[1]/a[1]/text()').extract()[0]                    # 作者名
            book_intro = i.xpath('p[@class="intro"]/text()').extract()[0]             # 小说简介
            book_type = i.xpath('p[1]/a[2]/text()').extract()[0]                      # 小说更新状态
            book_src = i.xpath('h2/a/@href').extract()[0]                             # 小说链接
            book_data = {
                "小说名": book_name,
                "作者": book_author,
                "简介": book_intro,
                "更新状态": book_type,
                "链接": book_src,
                # 将取到每个小说的数据存入字典中
            }
            data_list.append(book_data)                                               # 将字典存入列表
            # data_list[name] = book_data                                             将字典存入字典,以小说名为键
        print(data_list)                                                              # 终端查看小说数据
        return data_list

好好好,代码已经写完了,那么我们来看看运行效果吧

在这里插入图片描述

可以看到我们的爬虫也是成功的爬取到了我们想要的数据,那么我们的数据如何保存下来呢?

有两种办法,一种是使用我们在Python基础学过的os模块,一种是Scrapy自带的数据保存方法

10. 数据保存

1. 使用Scrapy的方法保存

Scrapy给我们了四种保存数据的方式,分别是json, json line, xml, csv

不需要编写代码,只需要在运行项目的时候添加命令参数即可

scrapy crawl 项目名称 -o 文件名称.你想要的格式

比如我们现在使用json的格式储存,我们只需要

scrapy crawl qidian_spider -o data.json

这样我们就可以看到在根目录生成了一个json格式的data文件,我们点进去看看

在这里插入图片描述

好了,这就成功了

2. 使用os模块保存数据

我们可以使用python自带的os模块来对文件进行操作

在爬虫里面添加的代码如下

with open('data.txt','w') as f:
            f.write(str(data_list))

注意添加到函数下面,return上面

效果如图:

在这里插入图片描述

使用Git管理代码

1. 填写好项目的README文件

## 欢迎来到 Cloud Studio ##

这是布小禅使用Clould Studio尝试编写的一个小小的爬虫Python项目。

##  项目介绍


爬取起点小说网月票榜榜单内小说,书荒的书虫有福音了哈

使用Scrapy爬虫框架,当然也仅仅只是用了一点,属于是使用大炮打蚊子了

## 运行项目

常见的Scrapy运行,使用命令`srapy crawl 项目内模块名`。

需要注意的是,你需要在运行项目之前切换到项目内,而不是Clould Studio的默认目录,那样你会运行失败的

2. 使用git将代码上传到Gitee

我们先打开终端,输入git init初始化代码仓库

然后

git add .
git commit -m "爬取起点月票榜数据"
git clone git remote add origin # 仓库链接
git push -u origin master       # 上传gitee

3. 项目完成销毁工作空间

先将工作空间关闭

在这里插入图片描述

退出之后回到工作空间,可以点击三个点删除

在这里插入图片描述

结语

相较于传统的IDE来说,Clould Studio更为的快捷和方便,不需要复杂的环境配置,不需要下载任何东西,只需要有一台能够连接互联网的电脑就可以进行开发工作了。

更为难能可贵的是,Clould Studio不仅仅没有因为快捷方便而舍弃了一部分功能,还在拥有大多数IDE功能的前提下增加了很多功能。比如新增的AI代码助手,模板一键搭建等都是很方便的。

以往除了vscode之外,我们想要一个全能的编辑器是很难,而Clould Studio就可以全能,什么语言它都兼容,而且写多个语言也不需要下载多个语言的编译器,就可以直接上手,为新手开发者和学生提供了很大的便利。

目前还没看到有缺点,是一款很优秀的软件,很适合入手。

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

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

相关文章

“苏豪 x 莱佛士”再度携手,惊艳亮相上海发型师节!

2023年6月28日,以“为爱启航”为主题的第16届AHF亚洲发型师节在上海跨国采购中心盛大开幕。继上次在施华蔻专业2023春夏新季风发布会上,苏豪x莱佛士合作的大秀,赢得了现场观众阵阵掌声。这次“Kraemer苏豪x莱佛士”再度携手,惊艳亮…

PoseiSwap:基于 Nautilus Chain ,构建全新价值体系

在 DeFi Summer 后,以太坊自身的弊端不断凸显,而以 Layer2 的方式为其扩容成为了行业很长一段时间的叙事方向之一。虽然以太坊已经顺利的从 PoW 的 1.0 迈向了 PoS 的 2.0 时代,但以太坊创始人 Vitalik Buterin 表示, Layer2 未来…

MySQL常见问题处理(三)

MySQL 常见问题解决 夕阳留恋的不是黄昏,而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记,进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…

【MFC]实现16进制文件浏览器-详细步骤+代码

学习MFC已经两天了,我们来写一个小项目:16进制文件浏览器,简单实现,因为我们MFC学的还不是很透彻,这里会给出详细的每一个步骤,并且详细解释每一个方法: 文章目录 提前了解步骤:基本…

Apache poi 对单元格进行合并

需求背景: 在导出excel时, 需要对内容相同的单元格进行纵向合并 期望达到的效果: poi 实现合并单元格的方法 sheet.addMergedRegion(new CellRangeAddress(开始行, 结束行, 开始列, 结束列)); 个人的实现思路: 1): 举个列子, 就拿截图贴出的 [公司类别] 这一列来进行说明 …

【QT学习】01:helloqt

helloqt OVERVIEW helloqt一、helloqt1.使用向导创建2.手动创建3.pro文件4.Qt应用程序框架 二、按钮创建main.cppmywidget.cpp 三、对象模型1.对象树引入2.存在的问题 一、helloqt 创建一个qt项目,可以使用creator的向导创建,也可自己手动创建&#xff…

企业如何搭建矩阵内容,才能真正实现目的?

当下,新媒体矩阵营销已成为众多企业的营销选择之一,各企业可以通过新媒体矩阵实现扩大品牌声量、维持用户关系、提高销售业绩等不同的目的。 而不同目的的矩阵,它的内容运营模式会稍有差别,评价体系也会大不相同。 企业在运营某类…

性能优化-react路由懒加载和组件懒加载

背景 随着项目越来越大,打包后的包体积也越来越大,严重影响了首屏加载速度,需要对路由和组件做懒加载处理 主要用到了react中的lazy和Suspense。 废话不多说,直接上干货 路由懒加载 核心代码 import React, { lazy, Suspens…

精准感知+高效预判——城市“听诊器”防水患于未然

近期,全国多地遭遇暴雨猛袭,引发城市积涝,更有台风“杜苏芮”登陆后引发沿海内陆极端降水,各地排水防涝工作面临严峻考验。 快速定位城市排水管网系统的管道淤堵点,对河道水位、雨量情况、污水厂进水流量以及泵站运行情…

【云原生K8s】二进制部署单master K8s+etcd集群

一、实验设计 mater节点master01192.168.190.10kube-apiserver kube-controller-manager kube-scheduler etcd node节点node01192.168.190.20kubelet kube-proxy docker (容…

HTTP(超文本传输协议)学习

关于HTTP补学 一、HTTP能干什么 通过下图能够直观的看出:“交换数据 ” 二、HTTP请求例子 一个 HTTP 方法,通常是由一个动词,像 GET、POST 等,或者一个名词,像 OPTIONS、HEAD 等,来定义客户端执行的动作。…

Centos7.x修改密码

Centos7.x修改密码 root修改自己的密码 云服务器 云服务器则直接在控制台修改(例如阿里云服务器直接在阿里云服务器控制台修改,不赘述)命令行方式: 命令行输入: passwd 再两次输入新密码 root修改普通用户的密码 命令行方式: passwd 用户名再输入新的密码 普…

深入理解TCP三次握手:连接可靠性与安全风险

目录 导言TCP简介和工作原理的回顾TCP三次握手的目的和步骤TCP三次握手过程中可能出现的问题和安全风险为什么TCP三次握手是必要的?是否可以增加或减少三次握手的次数?TCP四次挥手与三次握手的异同点 导言 在网络通信中,TCP(Tra…

7个更好用的数据可视化工具,建议收藏

在数据可视化工具的帮助下,设计师可以将数据转化为图像进行表达,让数据更加直观,更容易理解。今天本文会与打击分享7个好用的数据可视化工具,一起来get更好用的数据表达方式吧! 1、即时设计 即时设计是一个非常受欢迎…

【js】FormData方法介绍和使用:

文章目录 一、接口使用FormData提交数据:二、FormData概述:三、FormData案例: 一、接口使用FormData提交数据: 二、FormData概述: 三、FormData案例: let formData new FormData() for (const key in tha…

一篇聊聊JVM优化:堆

一、Java 堆概念 1、简介 对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享 的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java 世界…

成为“黑客“前,必须经过的“学习路线“!!!

成为"黑客"前,必须经过的"学习路线"!!! 最近很多小伙伴在看了我的文章后,有一个共同的问题,"我们是小白,我们没有基础,我们如何通过自学,就可…

vue3数组V-for中动态生成$refs

vue3数组V-for中动态生成$refs 在项目实际需求中&#xff0c;可能会遇到使用数组动态生成$refs,根据官方参考&#xff0c;采用了以下方式实现 <template><div class"content"><ul v-for"(item, index) in editableTabs" :key"item.n…

2023全网最全的爆款抓包工具,各有千秋

在处理IP网络的故障时&#xff0c;经常使用以太网抓包工具来查看和抓取IP网络上某些端口或某些网段的数据包&#xff0c;并对这些数据包进行分析&#xff0c;定位问题。 在 IMON项目里&#xff0c;使用抓包工具抓包进行分析的场景在EPG采集、引流模块和软终端监看模块&#xff…

【练】创建两个线程:其中一个线程拷贝图片的前半部分,另一个线程拷贝后半部分

方法一&#xff1a; 先在主函数创建并清空拷贝的目标文件&#xff0c;再创建两个线程&#xff0c;在两个线程内部同时打开要读取的文件以及要拷贝的目标文件&#xff08;两个线程不共用同一份资源&#xff09;。 使用到的函数&#xff1a; 标准IO函数&#xff08;fprintf&…