python scrapy4——middlewaves

python scrapy4——middlewaves

在这里插入图片描述

middlewaves

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用ua随机请求头做案例

在这里插入图片描述

爬虫文件:——没有打开请求头

在这里插入图片描述

结果:

在这里插入图片描述

打开请求头下

在这里插入图片描述

结果:

在这里插入图片描述
在这里插入图片描述

使用虚假请求头:

方法一:将虚假请求头放在一个列表里面,然后random.choice()

在这里插入图片描述
在这里插入图片描述

需要打开下载中间器:

在这里插入图片描述

结果

在这里插入图片描述
在这里插入图片描述

多次请求:用到新的参数:dont_filter =True(不去重)

在这里插入图片描述
在这里插入图片描述

第二种方法:用fake_useragent import UserAgent

先创建一个UserAgent的对象——ua =UserAgent(),然后让useragent=ua.random

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汽车之家爬取练习

在这里插入图片描述

图片地址需要补全

在这里插入图片描述
在这里插入图片描述

发现在网页源码中

在这里插入图片描述

翻页逻辑:

第一页:https://car.autohome.com.cn/photolist/series/42726/6612564.html#pvareaid=3454450

第二页:https://car.autohome.com.cn/photolist/series/3742/p2/

第三页:https://car.autohome.com.cn/photolist/series/3742/p3/

第一页可以修改为:https://car.autohome.com.cn/photolist/series/3742/p1/

在这里插入图片描述

找ui里的li

在这里插入图片描述
在这里插入图片描述

代码:

import scrapy


class CarSpider(scrapy.Spider):
    name = 'car'
    allowed_domains = ['car.autohome.com.cn']
    ## 修改start_urls
    start_urls = ['https://car.autohome.com.cn/photolist/series/42726/6612564.html#pvareaid=3454450']

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

结果

在这里插入图片描述

直接复制url到浏览器打开,少了的https会补全

在这里插入图片描述
在这里插入图片描述

item数据到管道后进行二进制图片保存——用urllib的urlretrieve

在这里插入图片描述

保存的图片名字用src__后面命名

在这里插入图片描述
在这里插入图片描述

指定保存路径

在这里插入图片描述

要动态添加路径用到os——为了防止将反斜杠\识别为特殊字符,要加上r’

在这里插入图片描述
在这里插入图片描述

os.path.dirname(file)返回的是这个文件前的所有路径

在这里插入图片描述
在这里插入图片描述

保存路径:

from urllib import request
import os

class ScrapycarPipeline:
    def process_item(self, item, spider):
        # 获取图片url地址:https://car2.autoimg.cn/cardfs/product/g1/M0B/7E/E5/240x180_0_q95_c42_autohomecar__ChsEj13XxISAMilCAAIIygqZ9W0856.jpg
        src =item['src']
        # 获取图片名字 用split(‘__’)来划分,要__后一个作为名字
        img_name =item['src'].split('__')[1]

        # 保存图片 urlretrieve(第一个参数是url地址,第二个参数是文件地址)
        # 保存路径:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images 只要在这个后面加上img_name就可以
        # 路径名:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images\img_name
        # 动态添加路径 到了和images上级的路径再join到images,就可以过来这个路径了
        # 我现在pipline的路径是这个:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\scrapycar\scrapycar\pipelines.py
        # 两个dirname就可以到scrapy汽车这个路径,再加上images就可以到C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images
        file_path =os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))),'images')
        print(file_path)
        # 所有这个urlretrieve第一个参数是地址,第二个是保存路径就放file_path 再加一个/和文件名
        # 比如:C:\Users\Administrator\PycharmProjects\爬虫\scrapy汽车\images + / + csfdgfgf.jpg
        request.urlretrieve(src,file_path +'/' + img_name)
        return item

在这里插入图片描述

结果:

在这里插入图片描述
在这里插入图片描述

也可以在setting里设置好图片保存处(后期不能修改)

setting文件增加:

在这里插入图片描述

用item文件

在这里插入图片描述

爬虫程序:

在这里插入图片描述

setting文件再修改:

在这里插入图片描述

这样运行会报错——ValueError: Missing scheme in request url: h

在这里插入图片描述

解决方式:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值