手写myscrapy(三)

我们现在具体讲解一下主要功能的实现
我们先定义一个接口类 名称:MyObject 主要定义需要实现的方法定义
代码如下:

class MyObject(object):start_urls: Optional[list] = Nonename: str = Nonekeywords = Falsecookies : dict = Noneencode :str = Nonetimeout = 30method = "GET"params = Nonedata = Nonefiles = Nonejson = Noneverify = Falseproxies = Noneheaders = {}_key_url = set()def to_excel(self):'''call interface must be implemented ;'''raise NotImplemented(f"{sys._getframe().f_code.co_name} must be overwrite")def to_database(self):'''call interface must be implemented ;'''raise NotImplemented(f"{sys._getframe().f_code.co_name} must be overwrite")def follow(self, url=None, callback=None, cb_kwargs=None, rq_kwargs=None):raise NotImplemented(f"{sys._getframe().f_code.co_name.co_name} must be overwrite")def append(self, excel_item):raise NotImplemented(f"{sys._getframe().f_code.co_name.co_name} must be overwrite")

接下来实现一下myrequest 类 主要实现 http的请求 在这里插入图片描述
实现代码如下:

from config import setting
import requests
from common.log import loger
from common.myobject import MyObject
import timeclass MyRequest(MyObject):_request = requests.Session()@classmethoddef request(self, url, retry=3, **kwargs):''':param  retry-> times of request:param  **kwargs ->  parameter of requests.request; default value is property of Myobject'''if kwargs.get("headers") is None:if self.cookies:setting.DEFAULT_REQUEST_HEADERS.setdefault('Cookie',self.cookies)kwargs.setdefault("headers",setting.DEFAULT_REQUEST_HEADERS)self.headers=setting.DEFAULT_REQUEST_HEADERSelse:self.headers = kwargs.get('headers')if kwargs.get('method') :self.method = kwargs.get('method')if self.method.lower() == "post":if kwargs.get("type") == 1:self.headers.setdefault("X-Requested-With","XMLHttpRequest")self.headers.setdefault("Content-Type","application/x-www-form-urlencoded")if kwargs.get("type") == 2:self.headers.setdefault("Content-Type", "application/json")if kwargs.get('timeout') :self.timeout = kwargs.get('timeout')if kwargs.get('params'):self.params = kwargs.get('params')if kwargs.get('data'):self.data = kwargs.get('data')if kwargs.get('files'):self.files = kwargs.get('files')if kwargs.get('json'):self.json = kwargs.get('json')if kwargs.get('cookies'):self.cookies = kwargs.get('cookies')if kwargs.get('proxies') :self.proxies = kwargs.get('proxies')try:response = self._request.request(url=url,method=self.method,timeout=self.timeout,params=self.params,data=self.data,files=self.files,json=self.json,cookies=self.cookies,proxies=self.proxies,headers=self.headers ,verify=self.verify)if response is None:raise ValueError("response is none!!!")encoding = response.apparent_encodingif encoding is None:encoding = "utf-8"if self.encode is not None :encoding = self.encodecontent = response.content.decode(encoding,"ignore")self._key_url.add(url)return response,contentexcept Exception as e:loger.warn('request error:%s' % e)if retry > 0 :time.sleep(retry)return self.request(url, retry - 1, **kwargs)else:return None

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

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

相关文章

TypeScript(一):TypeScript基本理解

TypeScript基本理解 为什么使用TS JavaScript发展至今,没有进行数据类型的验证而我们知道,在编程阶段,错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级,它可以编译成普通、…

洛谷P8627 饮料换购 题解

#题外话(第27篇题解)(本题为普及-难度) #先看题目 题目链接https://www.luogu.com.cn/problem/P8627 #思路(用while循环,循环到山穷水尽为止,用一个计数的计量) #代码 #include …

数据分析(一) 理解数据

1. 描述性统计(summary) 对于一个新数据集,首先通过观察来熟悉它,可以打印数据相关信息来大致观察数据的常规特点,比如数据规模(行数列数)、数据类型、类别数量(变量数目、取值范围…

论文解读:Masked Generative Distillation

文章汇总 话题 知识蒸馏 创新点 带掩盖的生成式蒸馏 方法旨在通过学生的遮罩特征来生成老师的特征(通过遮盖学生部分的特征来生成老师的特征),来帮助学生获得更好的表现 输入:老师:,学生:,输入:,标签:,超参数: 1:使…

Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案

背景 看到Apache DolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x 解决办法&#…

Web 扫描神器:WhatWeb 保姆级教程(附链接)

一、介绍 WhatWeb 是一款用于识别网站技术栈和特征的开源Web扫描工具。它可以自动分析网站的响应并识别出使用的Web框架、CMS、服务器、JavaScript库等技术组件。WhatWeb的目标是通过分析网站的内容,提供有关目标的技术信息,这对于安全测试、漏洞评估和…

简析剩余电流动作继电器在油气田站场内监测路灯接地方式

安科瑞电气股份有限公司 上海嘉定 201801 【摘要】油气站站场内路灯接地方式多采用TT系统,部分采用TN-S系统,但无论TT系统还是TN-S系统均存在相应问题,为解决相应问题,本文建议油气田站场内路灯接地方式采用TN-S系统局部TT系统。…

数组转二叉树的一种方法-java(很特殊)

上代码 Node节点的代码 public class ThreadNode {private int data;private ThreadNode left;private boolean leftTag; // 左子节点是否为线索private ThreadNode right;private boolean rightTag; // 右子节点是否为线索// ... 省略get和set方法// ... 省略构造方法// ... …

《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)

文章目录 2.1 同态加密2.1.1 基础知识2.1.2 主要案例:云计算数据分析2.1.3 拓展案例 1:医疗数据分析2.1.4 拓展案例 2:金融风险评估 2.2 安全多方计算(SMC)2.2.1 基础知识2.2.2 主要案例:跨机构金融数据共享…

不要被带偏了,只靠运动减肥的效果极其有限;数据告诉你,不同减肥方式的真正效果

很多朋友问只靠运动是否能够达到减肥目标。 我们先看Chat GPT4的回答: 仅靠运动来成功减肥是可能的,但通常效果有限,而且比较困难。 减肥的基本原理是消耗的热量必须超过摄入的热量,从而产生能量赤字,使身体开始消耗…

已创建IAM子用户,添加云监控权限不生效

云上已创建IAM子用户,添加云监控权限不生效,如何解决。 此问题与权限配置有关,一般为IAM子帐号权限不足,需检查IAM配置的权限。 管理员使用主账户登录管理控制台。在统一身份认证服务,左侧导航窗格中,单击…

[VulnHub靶机渗透] Fowsniff

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…