Scrapy实战

代码:

Spider

import scrapy
from urllib.parse import urljoin
from scrapy import Requestclass 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结尾。就过滤掉continueelse:# 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 itemclass 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 executeif __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结尾。就过滤掉continueelse:# 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 urljoin3。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:#请求对象传值的最佳方案:metayield 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.mzph.cn/news/704866.shtml

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

相关文章

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> ${…

ZYNQ:串口-CAN协议转换

前言 目前已经实现zynq的PS-CAN和PL-CAN功能。串口-CAN协议转换是实现以太网-CAN功能的过渡&#xff0c;通过这个流程能够减少后期以太网工程出现问题的频率。阶段性功能目标如下&#xff1a; 实现数据在CAN调试助手和串口调试助手之间的来回转换&#xff0c;从而了解中断机制…

华为云软件开发生产线CodeArts前端DevOps实践

原文链接&#xff1a;CodeArts前端DevOps实践_软件开发生产线 CodeArts_理论实践_DevOps概览 本文主要以CodeArts产品自身为背景&#xff0c;简要介绍一些在前端性能优化方面的优秀实践方法和常见问题。 在开始本文的内容之前&#xff0c;先简单介绍一下华为云CodeArts。Code…

html中的meta 元信息

html中的meta 元信息 1. 配置字符编码 <meta charset"utf-8">2. 针对 IE 浏览器的兼容性配置。 <meta http-equiv"X-UA-Compatible" content"IEedge">3. 针对移动端的配置 <meta name"viewport" content"widt…

MySQL进阶篇2-索引的创建和使用以及SQL的性能优化

索引 mkdir mysql tar -xvf mysqlxxxxx.tar -c myql cd mysql rpm -ivh .....rpm yum install openssl-devel ​ systemctl start mysqld ​ gerp temporary password /var/log/mysqld.log ​ mysql -u root -p mysql> show variables like validate_password.% set glob…

【Flink精讲】Flink状态及Checkpoint调优

RocksDB大状态调优 RocksDB 是基于 LSM Tree 实现的&#xff08;类似 HBase&#xff09; &#xff0c;写数据都是先缓存到内存中&#xff0c; 所以 RocksDB 的写请求效率比较高。 RocksDB 使用内存结合磁盘的方式来存储数据&#xff0c;每 次获取数据时&#xff0c;先从内存中 …

睿尔曼超轻量仿人机械臂—远程文件传输工具使用说明

一、介绍 由于很多开发人员是在Linux下进行开发&#xff0c;但文件资料大多是保存在Windows下&#xff0c;进行文件传输很不方便&#xff0c;所以可通过远程文件传输的方式进行跨系统传输。此类方法有很多&#xff0c;这里讲述的是使用WinSCP工具进行文件远程传输。 WinSCP 是…

Go的CSP并发模型实现M, P, G简介

GMP概念简介 G: goroutine&#xff08;协程&#xff0c;也叫用户态线程&#xff09; M: 工作线程(内核态线程) P: 上下文(也可以认为是cpu&#xff0c;逻辑cpu数量&#xff0c;可以在程序启动的时候设置这个数量&#xff0c;gomaxprocs函数设置) GMP 模型 在 Go 中&#xff…

iconfont的组件化使用方法(SVG)

目录 一、需求描述二、操作步骤1.在iconfont中选择项目需要使用的图标2.在项目中创建iconfont.js3.创建svgIcon组件 一、需求描述 将iconfont图标库选择的图标以SVG的形式引入项目并通过组件化的形式在项目中引用可控制图标的大小和颜色 二、操作步骤 1.在iconfont中选择项目…

Mysql常见函数和用法(重点)

where子句中经常使用的运算符 -- 查询总分大于200分的所有同学 select * from student2 where (chineseenglishmath)>200; -- 查询math大于60 并且(and)id大于4的学生成绩 select * from student2 where math>60 and id>4; -- 查询英语成绩大于语文成绩的同学 select …

跟着cherno手搓游戏引擎【26】Profile和Profile网页可视化

封装Profile&#xff1a; Sandbox2D.h:ProfileResult结构体和ProfileResult容器&#xff0c;存储相应的信息 #pragma once #include "YOTO.h" class Sandbox2D :public YOTO::Layer {public:Sandbox2D();virtual ~Sandbox2D() default;virtual void OnAttach()ove…

【Python 数据分析 实战案例】通过用户和订单的数据分析,制定营销策略

在互联网行业中&#xff0c;电子商务领域绝对是数据分析用途最多的地方&#xff0c;各大电商平台都依赖数据分析帮助其挖掘用户订单增长机会。比如某宝的随手买一件&#xff0c;核心思路也就是根据用户的日常浏览内容及停留时间&#xff0c;以及订单的关联度来进行推荐的。 本…

AI与大数据:智慧城市安全的护航者与变革引擎

一、引言 在数字化浪潮的席卷下&#xff0c;智慧城市正成为现代城市发展的新方向。作为城市的神经系统&#xff0c;AI与大数据的融合与应用为城市的安全与应急响应带来了革命性的变革。它们如同城市的“智慧之眼”和“聪明之脑”&#xff0c;不仅为城市管理者提供了强大的决策…

VScode连接远端服务器一直输入密码解决方法

文章目录 1 关闭远程连接2打开命令面板3 输入remote-ssh: kill vs code server on host… 1 关闭远程连接 2打开命令面板 3 输入remote-ssh: kill vs code server on host… remote-ssh: kill vs code server on host… 然后一路回车(选中出问题的主机)&#xff0c;输一遍密码…

tmux的使用方法

1. tmux的定义 我&#xff1a;什么是tmux&#xff1f; GPT&#xff1a;tmux&#xff08;terminal multiplexer&#xff09;是一个强大的终端复用器&#xff0c;它允许用户在一个终端窗口中创建、访问和控制多个会话。使用tmux&#xff0c;你可以在一个窗口中打开多个终端会话&…

SpringMVC(1)

目录 SpringMVC简介入门案例启动服务器初始化过程单次请求过程bean加载控制 PostMan请求与响应设置请求映射路径请求参数五种类型参数传递JSON数据日期类型参数传递响应 RestRest 简介RESTful快速开发 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&a…

快速搭建宠物医院服务小程序的步骤,无需编程经验

如果你是一家宠物医院或者宠物服务机构&#xff0c;想要拥有一款方便用户预约、查询信息的小程序&#xff0c;那么乔拓云网提供的轻应用小程序是你的不二选择。下面将为你详细介绍如何轻松打造宠物医院服务小程序。 1. 进入乔拓云网后台&#xff0c;点击【轻应用小程序】中的【…

FDTD算法总结

计算电磁学(Computational Electromagnetics, CEM)是通过数值计算来研究电磁场的交叉学科。 数值求解电磁学问题的方法可以分成频域(Frequency Doamin, FD)、时域(Time Domain, TD)等两类。 频域法基于时谐微分&#xff0c;通过对多个采样值的傅里叶逆变换得到所需的脉冲响应…

代码随想录|学习工具分享

工具分享 画图 https://excalidraw.com/ 大家平时刷题可以用这个网站画草稿图帮助理解&#xff01;如果看题解很蒙或者思路不清晰的时候&#xff0c;跟着程序处理流程画一个图&#xff0c;90%的情况下都可以解决问题&#xff01; 数据结构可视化 https://www.cs.usfca.edu/…

Springboot应用执行器Actuator源码分析

文章目录 一、认识Actuator1、回顾Actuator2、Actuator重要端点 二、源码分析1、Endpoint自动装配&#xff08;1&#xff09;自动配置入口&#xff08;2&#xff09;普通Endpoint自动装配&#xff08;3&#xff09;配置Web - Endpoint&#xff08;4&#xff09;注册Endpoint为M…