【爬虫之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)
相关推荐
_.Switch3 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
Hoper.J22 分钟前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
zengy524 分钟前
Effective C++中文版学习记录(三)
数据结构·c++·学习·stl
cyt涛33 分钟前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Willliam_william1 小时前
SystemC学习(1)— SystemC安装与HelloWorld
学习
sealaugh321 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
布丁不叮早起枣祈1 小时前
10.5学习
学习
弱冠少年1 小时前
websockets库使用(基于Python)
开发语言·python·numpy
向上的车轮1 小时前
Django学习笔记五:templates使用详解
笔记·学习·django
技术无疆1 小时前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘