scrapy学习(scrapy项目学习)

news2024/11/16 15:47:02

创建scrapy项目

创建爬虫项目

scrapy startproject ss1_miove

创建爬虫文件()

命令格式:scrapy genspider <爬虫名称> <网站域名>

scrapy genspider ss1_scrapy ssr1.scrape.center

scrapy框架的组成

spider文件夹:里面存放爬虫文件,用来定义爬虫文件
items文件:定义框架内的数据传输格式
Pipelines文件:数据保护模块
Minddlewwares:中间件模块
settings文件:框架配置模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnU1MSuW-1687664182665)(…/AppData/Roaming/Typora/typora-user-images/image-20230618090031123.png)]

scrapy框架 —爬虫文件

生成Python文件后scrapy会给你一个默认的爬虫模板

生成爬虫文件的命令:scrapy genspider <爬虫名称> <网站域名>

import scrapy


class Ss1ScrapySpider(scrapy.Spider):
    name = "ss1_scrapy"
    allowed_domains = ["ssr1.scrape.center"]
    start_urls = ["https://ssr1.scrape.center"]

    def parse(self, response):
        pass
属性说明
pares()方法默认获取start_urls的解析方法
name爬虫的名字
allowed_domains能抓取网站的范围
start_urls指定开始的url网站(可以指定多个url)

下面我们要对爬虫文件进行修改以达到对我们的采集需求

import re

import scrapy
from ssr1.ss1_miove.ss1_miove.items import Ss1MioveItem


class Ss1ScrapySpider(scrapy.Spider):
    name = "ss1_scrapy"
    allowed_domains = ["ssr1.scrape.center"]
    start_urls = ["https://ssr1.scrape.center"]

    def parse(self, response):
        movie_list = response.xpath('//*[@id="index"]/div[1]/div[1]/div')
        item = Ss1MioveItem()
        for movie in movie_list:
            # 获取电影网页中的名称
            movie_name = movie.xpath('./div/div/div[2]/a/h2/text()').extract_first()
            name = movie_name
            # 获取上映时间
            movie_dates = movie.xpath('./div/div/div[2]/div[3]/span/text()').extract_first()
            if movie_dates is None:
                movie_date = '0-0-0'
            else:
                movie_date = movie_dates[:-3]
            print(movie_date)
            # 获取电影时长
            movie_times = movie.xpath('./div/div/div[2]/div[2]/span[3]/text()').extract_first()
            # 获取电影评分
            movie_scores = movie.xpath('./div/div/div[3]/p[1]/text()').extract_first()
            # 上映地点
            movie_adds = movie.xpath('./div/div/div[2]/div[2]/span[1]/text()').extract_first()
            # # 标签
            movie_bqs = movie.css('div.categories ').extract()
            res = re.compile("[\u4e00-\u9fa5]+")
            movie_bq = res.findall(movie_bqs[0])

scrapy框架–items文件

  • items:定义框架中数据传输的形式

  • 定义item:

​ 定义item类并继承scrapy.item

​ 定义变量(也就是给字典定义一key值)

import scrapy


class Ss1MioveItem(scrapy.Item):
    # define the fields for your item here like:
    movie_name = scrapy.Field()
    movie_dates = scrapy.Field()
    movie_times = scrapy.Field()
    movie_scores = scrapy.Field()
    movie_adds = scrapy.Field()
    movie_pd = scrapy.Field()

代码解析:

请添加图片描述

  • ​ item的使用:

    1. 在spider中的导入定义好的item

    2. 创建item对象

    3. 使用字典的方式给item赋值

      ​ item[‘变量名’] = 赋值 (变量名可以自定义)

    4. 使用yield返回item

在spider中的导入定义好的item
from ssr1.ss1_miove.ss1_miove.items import Ss1MioveItem
创建item对象
item = Ss1MioveItem()
使用字典的方式给item赋值
item['movie_name'] = name
item['movie_dates'] = movie_date
item['movie_times'] = movie_times
item['movie_scores'] = movie_scores.strip()
item['movie_adds'] = movie_adds
item['movie_pd'] = '、'.join(movie_bq)
使用yield返回item
yield item

图片代码解析

请添加图片描述

首先我们先学习将数据存储到本地文件中(csv文件)

  • 可以在终端使用命令调用Feed export进行保存
scrapy crawl ss1_scrapy -o 1.csv 
  • 修改setting.py文件配置Feed export进行保存

    FEED_FORMAT = 'csv'
    FEED_URI = 'python.csv'
    

    配置输出文件的格式:

    FEED_FORMAT = ‘csv’ #csv要求是小写不然无法生成文件不知道原因

    输出文件的路径以及文件名:

    FEED_URI = ‘python.csv’
    请添加图片描述

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

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

相关文章

ELK之Elasticsearch7.17.4安装(yum方式)和三节点集群配置

一、下载Elasticsearch7.17.4 的rpm包 下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-4 二、建立elasticsearch的yum源 vim /etc/yum.repos.d/es.repo [elasticsearch] nameElasticsearch repository for 7.x packages bas…

IO多路复用之poll

文章目录 一&#xff1a;poll函数接口参数说明&#xff1a;返回结果&#xff1a; 二&#xff1a;poll的优缺点优点&#xff1a;缺点&#xff1a; 三&#xff1a;poll代码示例 一&#xff1a;poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, i…

Java设计模式之行为型-模板方法模式(UML类图+案例分析)

目录 一、概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执…

信驰达科技携手TI将CC2340推向更广市场领域

根据蓝牙技术联盟&#xff08;Bluetooth SIG&#xff09;2023年最新发布《2023年蓝牙市场最新资讯》&#xff0c;市调机构ABI Research预测数据显示&#xff0c;蓝牙市场在未来五年将会实现高增长&#xff0c;蓝牙设备年出货量将保持强劲增长势头&#xff0c;预计到2027年将达7…

python高频函数—CSV() 读写

Part.1 csv.reader()函数 csv.reader(csvfile, dialectexcel, **fmtparams) 返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。 一个简短的用法示例: >>> import csv>>> with open(eggs.csv, newline) as csvfile:... spamreader csv.r…

ctrl键的作用

crtl是control的英文缩写&#xff0c;是控制的意思&#xff0c;长和其他键组合起来使用&#xff0c;达到快捷操作的功能。 例如&#xff1a;ctrlX是剪切的功能&#xff0c;ctrlP是打印设置&#xff0c;ctrlZ是撤销&#xff0c;ctrlF是查找&#xff0c;ctrlY是恢复的功能等。 …

在野外使用无线电台的必知事项

电台属于无线通信设备的一种&#xff0c;主要用于发送和接收无线电信号&#xff0c;实现语音、数据和图像等信息的传输。它一般是由发射机和接收机两部分组成&#xff0c;能够在不同的频段和频率上进行通信。通过无线电波传输信息&#xff0c;为人们在不同场景中提供可靠的远距…

11.Rocket解决分布式事务

highlight: arduino-light 两阶段提交协议 原文链接&#xff1a;https://blog.csdn.net/fenglibing/article/details/92417739 两阶段提交协议(Two-phase Commit&#xff0c;2PC)经常被用来实现分布式事务。一般分为协调器TC和若干事务执行者两种角色&#xff0c;这里的事务执行…

【Vue3】学习笔记-ref函数、reactive函数

ref函数、reactive函数 Ref函数reactive函数 Ref函数 作用&#xff1a;定义一个响应式的数据语法&#xff1a;const xxxref(initValue) 创建一个包含响应式数据的引用对象(reference对象&#xff0c;简称ref对象)。JS中操作数据:xxx.value模板中读取数据&#xff1a;不需要.va…

地理数据处理-地理空间表的导入与查询

前言 现在大部分数据库都支持地理空间的数据存储&#xff0c;可以方便的与GIS平台调用&#xff0c;比如Geoserver、ArcGis, 但是如果使用不规范的空间表去发布图层预览可能会出现各种问题&#xff0c;比如坐标系错误&#xff0c;无法聚焦。 本文将举例最常见的SQLServer和Post…

Godot引擎 4.0 文档 - 手册 - 2D

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; 2D — Godot Engine (stable) documentation in English 画布层 视口和画布项目 CanvasItem是所有 2D 节点的基础&#xff0c;无论是常规的 2D 节点&#xff0c;例如…

深入理解微分、积分电路!搞懂PID控制原理就这么简单!

很多朋友觉得PID是遥不可及&#xff0c;很神秘&#xff0c;很高大上的一种控制&#xff0c;对其控制原理也很模糊&#xff0c;只知晓概念性的层面&#xff0c;知其然不知其所以然&#xff0c;那么本期从另类视角来探究微分、积分电路的本质&#xff0c;意在帮助理解PID的控制原…

智慧排水监测系统有什么作用?

随着城市化进程的加速&#xff0c;城市排水系统的压力不断增加。然而&#xff0c;当前城市排水系统面临着管理效率低下、水资源浪费和洪涝灾害等问题。为了解决这些问题&#xff0c;智慧排水监测系统逐渐成为了新的解决方案。本文将为大家详细介绍智慧排水监测系统的作用以及智…

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

堆——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容仍旧是二叉树&#xff0c;此刻分享的内容是一种特殊的二叉树&#xff0c;也就是堆了。下面&#xff0c;让我们进入堆的世界吧&#xff01;&#xff01;&#xff01; typedef int HeapDataType; typedef struct Heap {HeapDa…

MES系统是什么?它如何帮助企业提高生产效率?

随着制造业的发展&#xff0c;越来越多的企业开始使用全面的制造执行系统&#xff08;MES&#xff09;来管理其生产过程。那么&#xff0c;MES系统到底是什么呢&#xff1f;它又是如何帮助企业提高生产效率的呢&#xff1f;本文将为大家详细介绍。 一、MES系统的概念 MES系统是…

Leetcode 剑指 Offer II 032. 有效的变位词

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断它们是不…

基于物联网技术的智能配电室综合监控系统设计与产品选型

摘要&#xff1a;配电室是电力系统的重要基础设施&#xff0c;可以保障供配电系统的安全稳定运行。但是&#xff0c;配电室数量多、部署分散、管理复杂&#xff0c;人工现场巡检管理方式费时费工、错误率高&#xff0c;如果发生故障隐患&#xff0c;往往无法及时发现。针对配电…

Sparse Fuse Dense: 向高质量的深度补全3D检测迈进

点云的稀疏性&#xff1a;在远距离和遮挡区域提供的信息较差&#xff0c;导致难以生成精确的3D边界框。 出现了多模态融合。 图像和点云的不同表示方式使得它们难以融合&#xff0c;导致性能不佳。 论文提出了一种新颖的多模态框架SFD&#xff08;Sparse Fuse Dense&#xf…

二层交换机工作原理与MAC地址介绍

目录 MAC地址介绍 MAC地址的组成 MAC地址分类 MAC地址的作用 二层交换机介绍 MAC地址表的定义 MAC地址表项类型 二层交换机对数据帧的处理动作 MAC地址介绍 MAC地址&#xff08;Media Access Control Address)&#xff0c;直译为媒体存取控制位地址 MAC地址的组成 MA…