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

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

下载scrapy框架

scrapy安装视频链接

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

cmd:

bash 复制代码
scrapy startproject 项目名称

创建爬虫文件

(1)第一步:先进入到spiders文件中(进入相应的位置)
bash 复制代码
cd 项目的名字\项目的名字\spiders
(2)第二步:创建爬虫文件
bash 复制代码
scrapy genspider 爬虫文件的名字 要爬取的网页网址
(3)第三步:查看创建的项目文件------检查路径是否正确

注意:不满足时需要手动修改(版本不同,造成的结果不一)

运行爬虫代码

bash 复制代码
scrapy crawl 爬虫的名字

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

(1)查看某网站的君子协议
(2)修改settings文件中君子协议

scrapy项目的结构

response的常用属性和方法

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

python 复制代码
content_1=response.txt

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

python 复制代码
response.body

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

python 复制代码
response.xpath('')

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

python 复制代码
response.extract()

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

python 复制代码
response.extract()

scrapy框架原理解析

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

(1)进入scrapy shell工具

python 复制代码
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.运行后拿到数据
bash 复制代码
scrapy crawl 爬虫的名字
8.保存数据
(1)封装数据------yield提交给管道
(2)开启管道------保存内容

图1
图2

9.多条管道下载
(1)定义管道类
(2)在settings中开启管道
10.多页数据的下载
(1)定义一个基本网址和page
(2)重新调用def parse(self, response):函数------编写多页请求
(3)修改allowed_domains的范围------一半多页请求范围编写域名即可
11.爬取核心代码
python 复制代码
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)
相关推荐
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
木头左2 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归
B1nna2 小时前
Docker学习
学习·docker·容器
quant_19863 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
promising-w8 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥8 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机8 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
失败又激情的man8 小时前
python之requests库解析
开发语言·爬虫·python
爬虫程序猿8 小时前
利用爬虫按关键字搜索淘宝商品实战指南
android·爬虫