【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】

爬虫之scrapy框架——基本原理和步骤+爬取当当网(基本步骤)

    • 下载scrapy框架
    • 创建项目(项目文件夹不能使用数字开头,不能包含汉字)
    • 创建爬虫文件
        • (1)第一步:先进入到spiders文件中(进入相应的位置)
        • (2)第二步:创建爬虫文件
        • (3)第三步:查看创建的项目文件——检查路径是否正确
    • 运行爬虫代码
    • 查看robots协议——是否有反爬取机制——君子协议(修改君子协议)
        • (1)查看某网站的君子协议
        • (2)修改settings文件中君子协议
    • scrapy项目的结构
    • response的常用属性和方法
    • scrapy框架原理解析
    • scrapy sell 工具调试——具体下载不说明
    • 当当网爬取案例
        • 1. 创建当当网爬虫项目
        • 2. 检查网址
        • 3. 在函数中打印一条数据,看是否网站有反爬机制
        • 4. 定义数据结构——选择要爬取哪些属性
        • 5. 去网址分析数据——拿到xpath表达式
          • (1)拿到图片
          • (2)拿到名字
          • (3)拿到价格
        • 6. 编写函数
        • 7.运行后拿到数据
        • 8.保存数据
          • (1)封装数据——yield提交给管道![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4aeebbc751de48d6b56f457a91bc0c65.png)
          • (2)开启管道——保存内容
        • 9.多条管道下载
          • (1)定义管道类
          • (2)在settings中开启管道
        • 10.多页数据的下载
          • (1)定义一个基本网址和page
          • (2)重新调用def parse(self, response):函数——编写多页请求
          • (3)修改allowed_domains的范围——一半多页请求范围编写域名即可
        • 11.爬取核心代码

下载scrapy框架

scrapy安装视频链接

创建项目(项目文件夹不能使用数字开头,不能包含汉字)

cmd:

scrapy startproject 项目名称

请添加图片描述

创建爬虫文件

(1)第一步:先进入到spiders文件中(进入相应的位置)
cd 项目的名字\项目的名字\spiders
(2)第二步:创建爬虫文件
scrapy genspider 爬虫文件的名字 要爬取的网页网址

在这里插入图片描述

(3)第三步:查看创建的项目文件——检查路径是否正确

注意:不满足时需要手动修改(版本不同,造成的结果不一)
在这里插入图片描述

运行爬虫代码

scrapy crawl 爬虫的名字

查看robots协议——是否有反爬取机制——君子协议(修改君子协议)

(1)查看某网站的君子协议

请添加图片描述

(2)修改settings文件中君子协议

在这里插入图片描述

scrapy项目的结构

在这里插入图片描述

response的常用属性和方法

(1)爬去网站的源码数据

content_1=response.txt

(2)爬去网站的二进制源码数据

response.body

(3)xpath方法可以用来解析response中的内容

response.xpath('')

(4)extract方法用来提取seletor对象的data属性值

response.extract()

(5)extract_first方法用来提取seletor列表的第一个数据

response.extract()

scrapy框架原理解析

在这里插入图片描述

scrapy sell 工具调试——具体下载不说明

(1)进入scrapy shell工具

scrapy shell 网址

请添加图片描述
(2)可以看见有一个response对象
请添加图片描述
(3)可以对response对象进行操作调试(不用像项目一样每次多要运行项目,减少麻烦)
请添加图片描述

当当网爬取案例

1. 创建当当网爬虫项目

在这里插入图片描述

2. 检查网址

在这里插入图片描述

3. 在函数中打印一条数据,看是否网站有反爬机制

图1在这里插入图片描述

图2
在这里插入图片描述

4. 定义数据结构——选择要爬取哪些属性

在这里插入图片描述

5. 去网址分析数据——拿到xpath表达式
(1)拿到图片

请添加图片描述

(2)拿到名字

请添加图片描述

(3)拿到价格

在这里插入图片描述

6. 编写函数

(1)懒加载处理

图1——非第一张图片(懒加载——有data-original)在这里插入图片描述图2——第一张图片和其他的图片的属性值不一样
注:第一张可以用src,其他的用data-original
请添加图片描述
(2)代码解释如图:
请添加图片描述

7.运行后拿到数据
scrapy crawl 爬虫的名字

在这里插入图片描述

8.保存数据
(1)封装数据——yield提交给管道在这里插入图片描述
(2)开启管道——保存内容

图1在这里插入图片描述
图2在这里插入图片描述

9.多条管道下载
(1)定义管道类

在这里插入图片描述

(2)在settings中开启管道

在这里插入图片描述

10.多页数据的下载
(1)定义一个基本网址和page

在这里插入图片描述

(2)重新调用def parse(self, response):函数——编写多页请求

在这里插入图片描述

(3)修改allowed_domains的范围——一半多页请求范围编写域名即可

在这里插入图片描述

11.爬取核心代码
import scrapy
from scrapy_dangdang_095.items import ScrapyDangdang095Itemclass DangSpider(scrapy.Spider):name = "dang"#如果是多页请求的话,需要调整 allowed_domains的范围——一般情况下只写域名allowed_domains = ["category.dangdang.com"]start_urls = ["https://category.dangdang.com/cp01.28.01.12.00.00.html"]# 第二页第三页的网址——一个网站数据结构应该是一样的# http://category.dangdang.com/pg2-cp01.28.01.12.00.00.html# http://category.dangdang.com/pg3-cp01.28.01.12.00.00.html#根网址base_url="https://category.dangdang.com/pg"page=1def parse(self, response):#pipelines 下载数据#items 定义数据结构#   print('检验是否有反爬机制')#   src=//ul[@id="component_59"]/li//img/@src#   alt=//ul[@id="component_59"]/li//img/@alt#   price=//ul[@id="component_59"]/li//p[@class="price"]/span[1]/text()#   共享li标签——所有的seletor对象,都可以再次调用xpath方法#拿数据li_list=response.xpath('//ul[@id="component_59"]/li')for li in li_list:#都返回的是列表src=li.xpath('.//img/@data-original').extract_first()#第一张图片和其他的图片的属性值不一样#第一张可以用src,其他的用data-original#反爬的——懒加载if src:scr=srcelse:src=li.xpath('.//img/@src').extract_first()name=li.xpath('.//img/@alt').extract_first()price=li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()#导数据结构的包,使用定义的数据结构#from scrapy_dangdang_095.items import ScrapyDangdang095Item#遍历一下,得到一个对象——————将定义的数据封装为book#book=ScrapyDangdang095Item(src=src,name=name,price=price)#yield就是类似return,返回一个值——————获取一个book就将对象交给管道piplines——————再保存yield book# 第二页第三页的网址——一个网站数据结构应该是一样的# http://category.dangdang.com/pg2-cp01.28.01.12.00.00.html# http://category.dangdang.com/pg3-cp01.28.01.12.00.00.html#ctrl+z暂停下载#ctrl+alt+l,整理json数据格式#多页请求代码——多页请求代码——多页请求代码——多页请求代码#别忘记改变allowed_domains=属性的范围——一般只写域名if self.page<100:#第一页已经爬取完毕#所以直接加一self.page=self.page+1#将self.page强转为字符串url=self.base_url+str(self.page)+'-cp01.28.01.12.00.00.html'#去调用parse方法#scrapy.Request就是scrapy的get请求#callback属性就是要执行哪一个函数——注意不要加括号()yield scrapy.Request(url=url,callback=self.parse)

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

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

相关文章

Python多任务

进程 1. 进程的概念 一个正在运行的程序或者软件就是一个进程&#xff0c;它是操作系统进行资源分配的基本单位&#xff0c;也就是说每启动一个进程&#xff0c;操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。 比如:现实生活中的公司可以理解成是一个进程&a…

OpenAI 发布新款大型语言模型 GPT-4o,带大家了解最新ChatGPT动态。

OpenAI 发布新款大型语言模型 GPT-4o 昨日OpenAI 举办了一场线上活动&#xff0c;正式发布了其最新研发的 AI 模型 GPT-4o&#xff0c;并详细介绍了该模型的强大功能和未来发展规划。此次发布标志着 AI 技术的重大突破&#xff0c;为用户提供了更加便捷、高效的 AI 工具&#…

一张表搞定物业巡检?没错,就是这么神奇!

在车水马龙的城市中&#xff0c;高楼大厦鳞次栉比&#xff0c;它们不仅为城市形成一道风景线&#xff0c;也是我们日常工作与生活的家园。然而&#xff0c;在这背后&#xff0c;有一群默默付出的物业工作人员&#xff0c;用责任和担当守护着我们的安全与舒适。而在物业日常工作…

STM32IAP学习笔记

单片机不同的程序下载方式 ICP ICP是指在电路中编程。使用厂家配套的软件或仿真器进行程序烧录&#xff0c;目前主流的有JTAG接口和SWD接口&#xff0c;常用的烧录工具为J-Link、ST-Link等。在程序开发阶段&#xff0c;通常在连接下载器的情况下直接使用编程软件进行程序下载调…

护照OCR识别接口如何对接

护照OCR识别接口也叫护照文字识别OCR,指的是传入护照照片&#xff0c;精准识别静态护照图像上的文字信息&#xff0c;包括姓名、签发地点、签发机关、护照号码、签发日期等信息。那么护照文字识别OCR接口如何对接呢&#xff1f; 首先我们找到一家有护照OCR识别接口的服务商数脉…

【万字面试题】Redis

文章目录 常见面试题布隆过滤器原理和数据结构&#xff1a;特点和应用场景&#xff1a;缺点和注意事项&#xff1a;在python中使用布隆过滤器 三种数据删除策略LRU (Least Recently Used)工作原理&#xff1a;应用场景&#xff1a; LFU (Least Frequently Used)工作原理&#x…

Navicat16小白式安装和激活详解《简单》

简介&#xff1a; Navicat 是一款强大的数据库管理和开发工具&#xff0c;它支持多种数据库系统&#xff0c;包括 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 以及 SQLite。Navicat 提供了图形界面&#xff08;GUI&#xff09;来简化数据库的管理、操作和维护。…

柔性数组+结构体类型转换

柔性数组&#xff1a;在结构体中声明的时候仅作为占位符&#xff0c;好处是地址是连续的 强制类型转换&#xff1a;可用于通信双方进行信息交流 #include <iostream> #include <string.h>struct DataWater {int count;float size;char buf[0]; }; // dbuf相当于是…

MYSQL中的DQL

语法&#xff1a; select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段 limit 分页参数 条件查询 语法&#xff1a; 查询多个字段&#xff1a;select 字段1&#xff0c;字段2 from表名 查询所有字段&#xff1a…

“打工搬砖记”中首页的功能实现(一)

文章目录 打工搬砖记秒薪的计算文字弹出动画根据时间数字变化小结 打工搬砖记 先来一个小程序首页预览图&#xff0c;首页较为复杂的也就是“秒薪”以及弹出文字的动画。 已上线小程序“打工人搬砖记”&#xff0c;进行预览观看。 秒薪的计算 秒薪计算公式&#xff1a;秒薪…

RPA的全新形态—Agent智能体:当机器人开始“听”话

随着人工智能技术的不断进步&#xff0c;RPA正迈向其全新形态——Agent智能体。想象一下&#xff0c;如果你的日常工作中有一个智能助手&#xff0c;它不仅能理解你的需求&#xff0c;还能自动帮你完成那些繁琐的任务&#xff0c;这会是怎样的体验&#xff1f;这就是RPA技术正在…

从零创建一个vue2项目

标题从零创建一个vue2项目&#xff0c;项目中使用TensorFlow.js识别手写文字 npm切换到淘宝镜像 npm config set registry https://registry.npm.taobao.org安装vue/cli -g npm install -g vue/cli检查是否安装成功 vue -V创建项目 vue create 项目名安装TensorFlow npm …

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二

Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之触控开关二 1.概述 这篇文章在触摸屏上绘制一个开关&#xff0c;通过点击开关实现控制灯的开关功能。 2.硬件 硬件连接参考第一篇文章介绍 Arduino-ILI9341驱动-SPI接口TFTLCD实现触摸功能系列之获取触控坐标一 3.实现…

在线caj转换成pdf免费吗?caj变成pdf很容易!点进来!

在数字化阅读日益盛行的今天&#xff0c;各种电子文献格式层出不穷&#xff0c;其中CAJ和PDF无疑是两种最为常见的格式。CAJ是中国知网推出的一种专用全文阅读格式&#xff0c;而PDF则因其跨平台、不易被修改的特性&#xff0c;受到了广大读者的青睐。因此&#xff0c;将CAJ格式…

【C++】 类的新成员:static成员和类的好朋友:友元

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a; 类的新成员&#xff1a;static成员和类的好朋友&#xff1a;友元 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Li…

网络编程套接字(一) 【简单的Udp网络程序】

网络编程套接字<一> 理解源端口号和目的端口号PORT VS PID认识TCP协议和UDP协议网络字节序socket编程接口sockaddr结构简单的UDP网络程序服务端创建套接字服务端绑定运行服务器客户端创建套接字关于客户端的绑定问题启动客户端启动客户端本地测试INADDR_ANY 理解源端口号…

怎么给视频加水印?2招轻松搞定

在数字媒体时代&#xff0c;视频水印作为一种有效的版权保护手段&#xff0c;被广泛应用于各种场景。给视频添加水印不仅可以防止内容被恶意盗用&#xff0c;还能增加视频的辨识度&#xff0c;提升品牌形象。本文将为您介绍2种简单易行的方法&#xff0c;教您怎么给视频加水印&…

Linux进程控制——Linux进程等待

前言&#xff1a;接着前面进程终止&#xff0c;话不多说我们进入Linux进程等待的学习&#xff0c;如果你还不了解进程终止建议先了解&#xff1a; Linux进程终止 本篇主要内容&#xff1a; 什么是进程等待 为什么要进行进程等待 如何进程等待 进程等待 1. 进程等待的概念2. 进…

软件杯 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

【数据结构】平衡二叉树(插入、查找、删除)解析+完整代码

3.2 平衡二叉树 3.2.1 定义 平衡二叉树&#xff0c;简称平衡树&#xff08;AVL树&#xff09; 树上任一结点的左右子树高度差不超过1。 结点的平衡因子左子树高-右子树高 3.2.2 插入操作 插入结点后&#xff0c;可能造成不平衡 要调整最小不平衡子树&#xff0c;使其恢复平衡。…