Scrapy实战

news2024/9/29 15:21:28

代码:

Spider

import scrapy
from urllib.parse import urljoin
from scrapy import Request

class JiaSpider(scrapy.Spider):
    name = "jia"
    allowed_domains = ["desk.zol.com.cn"]
    start_urls = ["https://desk.zol.com.cn/dongman/"]

    def parse(self, resp,**kwargs):
        #hrefs 为Selector形式,获取内容,用extract()
        hrefs = resp.xpath("//ul[@class='pic-list2  clearfix']/li/a/@href").extract()
        for href in hrefs:
            #屏蔽掉,exe结尾的
            if href.endswith('.exe'):#如果href以.exe结尾。就过滤掉
                continue
            else:

                # href = "https://desk.zol.com.cn/"+href
                # print(href)
                # clild_url = resp.urljoin(href)
                # print(clild_url)
                clild_url = urljoin(resp.url,href)
                #print(clild_url)
                #再次发送新的请求   所有的请求,必须经过引擎,交给调度器。然后反馈给引擎然后走下载器
                #再次发送请求,回来如果没有其他参数就会调用parse方法,回来就去执行,callback的函数·················
                yield Request(clild_url,callback=self.parse2)#回调函数。
    def parse2(self, resp, **kwargs):
        #详情页
        img = resp.xpath("//img[@id='bigImg']/@src").extract_first()
        print(img)
        yield {
            "src":img
        }

Pipelines:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
from scrapy.pipelines.images import ImagesPipeline#处理图片
from scrapy.pipelines.files import FilesPipeline#直接下载
from scrapy import Request
# class TupianPipeline:
#     def process_item(self, item, spider):
#         return item

class TupianPipeline(ImagesPipeline):

    def get_media_requests(self,item,info):
        src = item['src']
        yield Request(src,meta={"dizhi":src})
        # for s in src:
        #     #请求对象传值的最佳方案:meta
        #   yield Request(s,meta={"dizhi":src})#发送请求

    #scrapy 帮我们完成路径的处理  ,返回文件的路径(src)
    def file_path(self,request,response=None,info=None,*,item=None):
        dizhi = request.meta['dizhi']
        file_name = dizhi.split("/")[-1]
        return f"olie/guang/fengjun/guant/liejun/{file_name}.jpg"

    #数据的结束,收尾工作
    def item_completed(self,results,item,info):
        return item

Settings:

 

 Runner:

from scrapy.cmdline import execute

if __name__=="__main__":
    execute("scrapy crawl jia".split())

 将会加载图片

Spider中的思路

    def parse(self, resp,**kwargs):
        #hrefs 为Selector形式,获取内容,用extract()
        hrefs = resp.xpath("//ul[@class='pic-list2  clearfix']/li/a/@href").extract()
        for href in hrefs:
            #屏蔽掉,exe结尾的
            if href.endswith('.exe'):#如果href以.exe结尾。就过滤掉
                continue
            else:

                # href = "https://desk.zol.com.cn/"+href
                # print(href)
                # clild_url = resp.urljoin(href)
                # print(clild_url)
                clild_url = urljoin(resp.url,href)
                #print(clild_url)
                #再次发送新的请求   所有的请求,必须经过引擎,交给调度器。然后反馈给引擎然后走下载器
                #再次发送请求,回来如果没有其他参数就会调用parse方法,回来就去执行,callback的函数·················
                yield Request(clild_url,callback=self.parse2)#回调函数。

1.获得的内容,xpath将他解开,找到,东西后,extract()解析,因为直接获取的是Selector形式的

2.然后,得到的里面有.exe结尾的广告。将他屏蔽掉。

这里有三种,网址拼接方式。
传统的
1. # href = "https://desk.zol.com.cn/"+href
                # print(href)
这个是scrapy自带的
2.# clild_url = resp.urljoin(href)
       # print(clild_url)
这个是导入包
from urllib.parse import urljoin

3。clild_url = urljoin(resp.url,href)
 print(clild_url)

3.然后需要再次发送请求,第二个网址。这里会用到回调函数。

yield Request(clild_url,callback=self.parse2)#回调函数。

4.然后进入下一个爬虫:

    def parse2(self, resp, **kwargs):
        #详情页
        img = resp.xpath("//img[@id='bigImg']/@src").extract_first()
        print(img)
        yield {
            "src":img
        }

 然后字典返回数据到,管道。

这个得到的数据就是,图片的url

5.在Pipelines中会请求,图片的url然后,保存它

  for s in src:
             #请求对象传值的最佳方案:meta
           yield Request(s,meta={"dizhi":src})#发送请求
#scrapy 帮我们完成路径的处理  ,返回文件的路径(src)

6.

请求url得到图片

然后用 Split分割,得到最后一个,作为名字。

 #scrapy 帮我们完成路径的处理  ,返回文件的路径(src)
    def file_path(self,request,response=None,info=None,*,item=None):
        dizhi = request.meta['dizhi']
        file_name = dizhi.split("/")[-1]
        return f"olie/guang/fengjun/guant/liejun/{file_name}.jpg"

    #数据的结束,收尾工作
    def item_completed(self,results,item,info):
        return item

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理

k8s集群的三种接口 k8s集群有三大接口: CRI:容器进行时接口,连接容器引擎--docker、containerd、cri-o、podman CNI:容器网络接口,用于连接网络插件如:flannel、calico、cilium CSI:容器存储…

C# 学习第三弹——表达式

表达式操作数运算符 (一)算数运算符 错误例子:这不是python!!!!!!!!!!!!! 正确结果&a…

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说,你要一部分原生代码开发,你就需要自己把 android 项目单独出去做(其实就相当于android 项目引用 Flutter的dart部分)。也就是说,在 Flutter…

状态机-----

1.原理 同步的意思就是状态的跳转都是在时钟的作用下跳转的,有限是指状态机中状态的个数是有限的。两种状态机的共同点都是状态的跳转只和输入有关,区别就是如果最后的输出只和当前状态有关而与输入无关,则是moore型状态机。如果最后的输出不…

文件对比工具Beyond Compare 4 mac v4.4.7(28397)中文版

Beyond Compare是一款适用于Windows、Mac OS X和Linux平台的文件和文件夹比较工具。它可以帮助用户比较和同步文件夹、文件和压缩包等内容,支持多种文件格式,如文本、图像、音频、视频等。 软件下载:Beyond Compare 4 mac v4.4.7(28397)中文版…

二进制部署k8s之网络部分

1 CNI 网络组件 1.1 K8S的三种接口 CRI 容器运行时接口 docker containerd podman cri-o CNI 容器网络接口 flannel calico cilium CSI 容器存储接口 nfs ceph gfs oss s3 minio 1.2 K8S的三种网络 节点网络 nodeIP 物理网卡的IP实现节点间的通信 Pod网络 podIP Pod与Po…

NVIDIA\CUDA\cudnn安装以及visual studio2022编译安装ceres2.2.0库

一、NVIDIA驱动安装 网址:官方驱动 | NVIDIA 因为本文之后需要visual studio2022进行编译,所以在安装NVIDIA\CUDA\cudnn之前你先得安装visual studio2022 点击NVIDIA控制面板,NVIDIA Control Panel 查看产品家族 根据产品家族选择驱动,点…

SpringBoot使用classfinal-maven-plugin插件加密Jar包

jar包加密 1、在启动类的pom.xml中加入classfinal-maven-plugin插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><…

CleanMyMac4苹果Mac电脑全面、高效的系统清理工具

CleanMyMac 4 for Mac是一款专为Mac用户设计的系统清理和优化工具。它具备多种功能&#xff0c;旨在帮助用户轻松管理和释放Mac上的磁盘空间&#xff0c;同时提升系统性能。 系统垃圾清理&#xff1a;CleanMyMac 4能够深入扫描Mac的每一个角落&#xff0c;智能识别并清除不需要…

qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径

qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文&#xff1a; 1.C笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放…

C++ list详解以及模拟实现

目录 1.list的使用 1.1list的定义 1.2list的使用 1.3list iterator使用 1.4list capacity 1.5list element access 1.6list增删查改 2.list迭代器失效问题 3.list的模拟实现 1.list的使用 1.1list的定义 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容…

理想滤波器、巴特沃斯滤波器、高斯滤波器实现(包含低通与高通,代码实现与分析)

本篇博客聚焦理想滤波器、巴特沃斯滤波器、高斯滤波器进行原理剖析、代码实现和结果总结&#xff0c;代码含有详细注释&#xff0c;希望帮助大家理解。 以下将从理想低通滤波器、理想高通滤波器、巴特沃斯低通滤波器、巴特沃斯高通滤波器、高斯低通滤波器、高斯高通滤波器六个…

【网站项目】437物流管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

No matching version found for get-symbol-description@^1.0.2前端项目报错解决(亲测可用)

目录 一、问题详情 二、解决方案 一、问题详情 拉取一个新的项目的时候&#xff0c;前端进行install依赖的时候&#xff0c;报了如下的错误。 6120 verbose node v16.15.1 6121 verbose npm v8.11.0 6122 error code ETARGET 6123 error notarget No matching version foun…

隐变量模型、Auto-Encoder、VAE、VQVAE的学习

TOC 1 生成模型以及隐变量模型角度理解2 自编码器AE2.1 简单理解AE2.2 概率角度理解AE 3 变分自编码器VAE3.1 理解VAE3.1.1 证据下界(Evidence Lower Bound, ELBO)3.1.2 Encoder和Decoder3.1.2.1 Encoder3.1.2.1 Decoder 3.1.3 汇总3.2 概率角度理解 4 VQVAE4.1 AE、VAE和VQVAE…

计算机中x32、x64、x86是什么意思?

没有 x32 的说法&#xff0c; x86、x64 都指的是 CPU 的指令集架构。 指令集 所谓指令集&#xff0c;可以理解成硬件对外的接口。我们运行程序是通过操作系统调度&#xff0c;操作系统然后让硬件去计算。让硬件计算的话&#xff0c;比如一些加法乘法&#xff0c;循环之类的&…

网络防御-内容过滤技术

目录 内容过滤技术文件过滤技术压缩 文件过滤技术的处理流程内容过滤技术邮件过滤技术 内容过滤技术 文件过滤技术 这里说的文件过滤技术&#xff0c;是指针对文件的类型进行的过滤&#xff0c;而不是文件的内容。想要实现这个效果&#xff0c;我们的设备必须识别出&#xff1…

sqllabs第46关 order by 注入(通过盲注)

打开第46关 提示我们(请将参数输入为sort&#xff08;带数值&#xff09;) 用sort注入排序 尝试操作 order by注入 什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理&#xff0c;使用ORDER BY语句不仅支持对单列数据的排序&#xff0c;还支持对数据表中…

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版&#xff0c;省的安装。。解压到任意位置&#xff0c;备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…

jeesite用字典项配置二级下拉选

1、配置字典项 2、html代码&#xff1a;修改下拉选项框 <div class"col-xs-6"><div class"form-group"><label class"control-label col-sm-4" title""><span class"required">*</span> ${…