当前位置: 首页 > news >正文

【爬虫之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.lryc.cn/news/348731.html

相关文章:

  • C++ QT设计模式:责任链模式
  • 基于springboot+mybatis+vue的项目实战之(后端+前后端联调)
  • 【教程向】从零开始创建浏览器插件(六)实战篇
  • 如何用 OceanBase做业务开发——【DBA从入门到实践】第六期
  • Element-UI快速入门
  • 【JavaWeb】网上蛋糕商城后台-商品管理
  • Django Admin后台管理:高效开发与实践
  • Centos7网卡启动失败(Failed to start LSB: Bring up/down)
  • 【NOIP2008普及组复赛】 题4:立体图
  • 【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)
  • Windows---CMD常用指令大全
  • 消息中间件是什么?有什么用?常见的消息中间件有哪些?
  • 富锂锰基材料极具发展潜力 我国产业化进程加速
  • 聚水潭和金蝶云星空单据接口对接
  • OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程
  • 没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库
  • Hive中小文件过多的几种处理方式
  • 用户登录认证和权限授权(SpringSecurity、JWT、session)
  • 第十二届蓝桥杯省赛真题 Java A 组【原卷】
  • 工作随机:linux 挂载LVM管理模式的磁盘
  • 打印kafka最近的消息
  • e行64位V11.17.4 安卓全局虚拟定位APP
  • vue项目通过点击文字上传html文件,查看html文件
  • 【WEEK12】 【DAY1】整合JDBC【中文版】
  • 23种设计模式(软考中级 软件设计师)
  • 记录一下 log4j的漏洞
  • Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
  • linux 性能监控命令之dstat
  • 花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍
  • 大模型管理工具:Ollama