爬虫笔记27:scrapy shell交互端的使用、将公共变量放在settings文件中、middlewares下载中间件的使用、案例(爬取汽车之家)、使用scrapy内置的下载图片/文件的方法

一、scrapy shell交互端的使用
scrapy shell是scrapy的一个交互终端,其作用是不用创建scrapy项目的情况下尝试以及调试代码 ,最常用的是调试xpath语句。

使用方法:
1、cmd命令行中输入: scrapy shell 网址
2、输入:response.xpath(…)

案例:
在这里插入图片描述
在这里插入图片描述
二、将公共变量放在settings文件中
比如账号密码等,再在别的文件中,用from settings import ?导入并使用。

案例:
1、在settings文件中添加:
在这里插入图片描述2、在别的文件中导入并使用:
在这里插入图片描述

三、middlewares下载中间件的使用
下载中间件是引擎和下载器之间通信的中间件;我们可以在此设置代理(随机ua) ,以达到反反爬的目的。
下载中间件中封装了2个重要的方法:
(1)process_request(self,request,spider) (重点)
(2)process_response(self,request,spider)(了解既可)
在这里插入图片描述
1、process_request(self,request,spider) (重点)
当每个request(url)通过下载中间件的时候,该方法调用。

  • 参数
    request 就是被拦截的请求(也就是那个url)
    spider 爬虫类(即爬虫文件中class XXXSpider)实例化的对象
  • 返回值
    (1) 返回None :它正常的操作 ,scrapy正常的去处理request对象, 执行对应的方法
    (2)返回response对象: 就是中间件直接把返回的response对象给引擎,不经过下载器了
    (3)返回request对象: 就是中间件把它返回的request对象给下载器 ,下载器根据这个request对象返回数据,相当于是替换了request

2、process_response(self,request,spider)
当下载器完成http请求的时候,该方法调用。

那么,要如何设置随机ua呢?
步骤:
第一步 在middlewares文件中添加随机ua
在这里插入图片描述

第二步 重写process_request()方法
在这里插入图片描述

第三步 千万不要忘记在settings里面开启下载中间件
在这里插入图片描述
第四步 编写爬虫文件
以http://httpbin.org/user-agent为例,该网站可以显示本电脑的ua
在这里插入图片描述
scrapy.Request()会默认去掉重复项(response,可以理解成重复的url),参数dont_filter=True表示不去重。
结果:(一直在打印结果)
在这里插入图片描述
对比下去重的结果:也就是说只打印出一个ua
在这里插入图片描述

补充1:前两步也可以用fake_useragent合成一步来写:
在这里插入图片描述
关于上图中的111行的说明:
(1)Request()方法当中的所有参数都可以作为请求对象request的属性;
(2)Request()方法中的参数有:url,meta,callback,headers,cookies等;
(3)headers,cookies要以字典的形式添加。

补充2:设置代理IP
在这里插入图片描述
说明:
(1)设置代理ip,我们添加request请求对象,要使用meta属性;
所以,meta的作用有2个,1是在不同解析函数间传递数据,2是定义代理ip

补充3:设置cookies(记得settings.py文件中第36行取消注释并为True,即COOKIES_ENABLED = True)
在这里插入图片描述
settings.py文件中第36行的#COOKIES_ENABLED = False的说明:
(1)取消注释,即COOKIES_ENABLED = False,则找的是settings.py文件中的第42行DEFAULT_REQUEST_HEADERS里面的cookies
(2)取消注释并为True,即COOKIES_ENABLED = True,则找的是中间件中的cookies

四、案例(爬取汽车之家)
需求:爬取汽车之家奥迪汽车的图片,如下图:
https://car.autohome.com.cn/photolist/series/18/p1/
在这里插入图片描述

第一步 页面分析
1、网页原代码中是否有我们要爬取的图片:
(1)我们右键检查,发现imgb标签中的src属性值就是要爬取图片的url;

我们复制这个属性值,到网页原代码中去查找;
在这里插入图片描述

发现原代码中是有的。
所以我们要做的就是在原代码中去爬取上图中的src属性值,在逐个访问。

爬虫文件代码:(不要忘记修改settings文件中的ROBOTSTXT_OBEY = False和添加LOG_LEVEL = ‘WARNING’以及DEFAULT_REQUEST_HEADERS中添加’user-agent’)

import scrapy


class AudiSpider(scrapy.Spider):
    name = 'audi'
    allowed_domains = ['car.autohome.com.cn']
    start_urls = ['https://car.autohome.com.cn/photolist/series/18/p1/']

    def parse(self, response):
        # 找ul下面的li
        lis = response.xpath('//ul[@id="imgList"]/li')
        for li in lis:
            item = {}
            item['src'] = 'https:' + li.xpath('./a/img/@src').extract_first()
            yield item

管道文件代码:(不要忘记打开settings文件中的管道设置)

from urllib import request
import os

class PicPipeline:
    def process_item(self, item, spider):
        # 获取图片的url
        src = item['src']
        # 获取url的后半部分作为图片的名字
        img_name = item['src'].split("__")[-1]
        # 保存图片:
        file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')   # 动态的添加路径,文件夹images要提前创建好
        request.urlretrieve(src,file_path + '/' + img_name) #请求src图片地址获取图片,并按指定路径和文件名保存
        return item

补充知识点:
在这里插入图片描述
在这里插入图片描述

结果:
在这里插入图片描述
五、使用scrapy内置的下载图片/文件的方法
(1)使用images pipeline下载图片的步骤:
• 在爬虫文件中定义好一个Item,
在这里插入图片描述
然后在items文件中为这个item定义两个属性,分别为image_urls以及images(这2个属性名不能自定义,必须是image_urls以及images,因为scrpy有内部逻辑和它对应)。image_urls是用来存储需要下载的文件的url链接,需要给一个列表。当文件下载完成后,会把文件下载的相关信息存储到item的images属性中,如下载路径、下载的url和图片校验码等。(本案例用不到)
在这里插入图片描述
• 在配置文件settings.py中配置IMAGES_STORE(这个名称也是不能自定义),这个配置用来设置文件下载路径。
在这里插入图片描述
• 在settings文件中开启ITEM_PIPELINES并设置成:‘scrapy.pipelines.images.ImagesPipeline’:1
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值