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

本文主要是介绍【爬虫之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)

这篇关于【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986835

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学