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

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

下载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 ScrapyDangdang095Item

class 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=1


    def 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=src
            else:
                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)
  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢下雨t

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值