爬虫(基本知识介绍,urllib库的说明)

爬虫

爬虫基础(一些基本原理的梳理)

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

注: parameters 和 query 混用,并且现在 query 用的多

  • ?query 查询 ,用来查询某类资源,如果有多个查询,则用&隔开

https://www.baidu&ie=utf-8

  • fragment 片段 ,对资源描述的部分补充

  • 两个作用,Vue 和 React 都可以借助它来做路由管理/ 另外一个作用:用作HTML锚点

HTTP 下 加入 SSL 层 简称 HTTPS

SSL的主要作用

  • 建立一个安全通道,保证数据传输的安全性

  • 确认网站的真实性

网络相关的书籍 《计算机网络》 《图解HTTP》

  • 响应头

    • Date:用于标识响应产生的时间

    • Last-mModified:用于指定资源的最后修改时间

    • Content-Encoding:用于指定响应内容的编码

    • Serve:博阿寒服务器的信息,例如名称,版本号

    • Content-Type:文档类型,指定返回的数据是什么类型

      • text/html 返回HTML

      • application/x-javascript 返回 js

      • image/jpeg 返回图片

    • Set-Cookie:设置Cookie,响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上

    • Expires:用于指定响应的国企时间,可以让代理服务器活浏览器将加载的内容更新到缓存中,当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载,缩短加载时间的目的

css选择器

  • 要是各个选择器之间不加空格,则代表并列关系

    • div#container .wrapper

    • 选择的是 id为container 的 div 元素内部的class为wrapper的元素

爬虫概述:爬虫就是获取页面并提取和保存信息的自动化程序

Cookie和Session:Cookie和Session需要配合,一个在客户端,一个在服务端,二者共同协作,就实现了登录控制

代理:对于爬虫来说,使用代理就是为了隐藏自身IP,防止自身的IP被封锁

进程:可以理解为一个可以独立运行的程序单位

线程:是进程中的一个任务

线程是操作系统进行运算调度的最小单位,是经常中的最小运行单位

并发:宏观看起来是同时运行

并行:宏观和微观都是同时运行

基本库的使用

Request类和urlopen类相当于类库已经封装号的极其常用的请求方法

最基础的HTTP库

  • urllib

    • request (最基本的HTTP请求模块,只需url 和 额外参数)

      • urlopen() ----> 是一个类

        • data(参数) —> 要使用bytes方法将参数转换为字节流编码格式的内容,如果传递这个参数,它的请求方式将变成POST

        • timeout(参数)

        • url (参数,必填)

      • Request -------> 是一个类

        • url(参数,必填)

        • data(参数,必须传bytes类型的,如果是字典,先用urllib.parse中的urlencode方法进行编码)

        • headers (参数,是一个字典,可以通过headers参数直接构造此项,也可以通过调用请求实例的 add_header 方法添加)

        • origin-req-host(参数,指的是请求方的host名称或者IP地址)

        • method(参数,字符串参数,“GET”,“POST”…等)

    • reeor

    • parse

      • 一个工具模块,提供了URL的处理方法,例如拆分,解析,合并
    # 对于data数据的处理data = bytes(urllib.parse.urlencode({name':'germy'},encoding='utf-8')response = urllib.request.urlopen('url',data=data)print(response.read().decode('utf-8'))# timeout 和 reeor 的配合使用import urllib.requestimport urllib.errorimport sockettry:response = urllib.request.urlopen('https://www.httpbin.org/post',timeout=0.1)except urllib.error.URLError as e:if isinstance(e.reason, socket.timeout):printimport urllib.requestrequest = urllib.request.Request('url')response = urllib.request.urlopen(request)# 此时urlopen的参数是Request类型的对象print(response.read().decode('utf-8'))# 使用Request类来发请求url = 'http://www.httpbin.org/post'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0','Host':'www.httpbin.org'}dict = { 'name':'Germey'}data = bytes(urllib.parse.urlencode(dict), encoding='utf-8')req = request.Request(url, data, headers, method='POST')response = request.urlopen(req)print(response.read().decode('utf-8'))

高级用法

  • urllib.request 模块里的 BaseHandler 类,这是其他所有 HandLer 类的父类,提供了最基本的方法,default_openmprotocol_request

    • HTTPDefaultErroeHandler

      • 用于处理HTTP响应错误,所有错误都会抛出HTTPError类的错误
    • HTTPRedirectHandler

      • 处理重定向
    • HTTPCookieProcessor

      • 处理Cookie
    • ProxyHandler

      • 设置代理,默认为空
    • HTTPPasswordMgr

      • 用于管理密码
  • Opener类 ------> 帮助我们深入一层进行配置

    • 利用Handler类构建Opener类
    # 验证from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_openerfrom urllib.error import URLErrorusername = 'admin'password = 'admin'url = 'https://ssr3.scrape.center/'p = HTTPPasswordMgrWithDefaultRealm()p.add_password(None, url, username, password)auth_handler = HTTPBasicAuthHandler(p)opener = build_opener(auth_handler)try:result = opener.open(url)html = result.read().decode('utf-8')print(html)except URLError as e:print(e.reason)#设置代理from urllib.request import urlopen, ProxyHandler, build_openerfrom urllib.error import URLErrorproxy_handler = ProxyHandler({'http':'http://127.0.0.1:1080','https':'https://127.0.0.1:1080'})opener = build_opener(proxy_handler)try:response = opener.open('http://www.baidu.com')print(response.read())except URLError as e:print(e.reason)# 获取Cookieimport http.cookiejar,urllib.requestcookie = http.cookiejar.CookieJar()handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler)response = opener.open('http://www.baidu.com')for item in cookie:print(item.name + '=' + item.value)

handler配置好,然后用Opener类打开

  • 异常处理

以上当了解就好 urllib …

看了这么久,结果跟我说这个库不好用,啊啊啊啊!!!!我服了

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

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

相关文章

探秘串口服务器厂家:背后的故事与应用

在科技飞速发展的今天,串口服务器作为连接串口设备与网络的桥梁,在工业自动化、智能交通、智能家居等众多领域发挥着关键作用。你是否好奇,那些生产串口服务器的厂家究竟有着怎样的故事?它们的产品背后又蕴含着怎样的原理呢&#…

工厂能耗系统智能化解决方案 —— 安科瑞企业能源管控平台

安科瑞顾强 政策背景与“双碳”战略驱动 2025年《政府工作报告》明确提出“单位国内生产总值能耗降低3%左右”的目标,要求通过产业结构升级(如高耗能行业技术革新或转型)、能源结构优化(提高非化石能源占比)及数字化…

BI面向模型开发和面向报表开发,有什么区别?

在数字化时代,商业智能(BI)已成为企业决策不可或缺的工具。BI项目实施时,通常有两种开发模式:面向模型开发和面向报表开发。虽然两者都旨在通过数据驱动决策,但在开发逻辑、目标价值和技术路径上存在显著差…

OpenHarmony人才认证证书

OpenHarmony人才认证体系目前支持初级工程师认证,要求了解OpenHarmony开源项目、生态进展及系统移植等基础知识,熟练掌握OpenHarmony的ArkUI、分布式软总线、分布式硬件、分布式数据管理等基础能力使用,具备基础的开发能力。 考试流程可参考O…

映射网络路路径和ftp路径原理是什么,如何使用,有什么区别

文章目录 一、原理1. 映射网络路径2. FTP路径 二、使用方法1. 映射网络路径2. FTP路径 三、主要区别1. 协议与功能2. 安全性与权限3. 适用场景 四、如何选择?五、注意事项 映射网络路径(如SMB/CIFS或NFS)和FTP路径(FTP/FTPS/SFTP&…

Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(一)

Windows 8包括 Microsoft DirectX 功能改进,使开发人员、最终用户和系统制造商受益。 功能改进在以下几个方面: 像素格式 (5551、565、4444) :在低功耗硬件配置下,DirectX 应用程序的性能更高。双精度着色器功能:高级…

GitHub 趋势日报 (2025年04月15日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1yeongpin/cursor-free-vip[Support 0.48.x](Reset Cursor AI MachineID & Auto Sign Up / In & Bypass Higher…

2025年推荐使用的开源大语言模型top20:核心特性、选择指标和开源优势

李升伟 编译 随着人工智能技术的持续发展,开源大型语言模型(LLMs)正变得愈发强大,使最先进的AI能力得以普及。到2025年,开源生态系统中涌现出多个关键模型,它们在各类应用场景中展现出独特优势。 大型语言…

回收镀锡废水的必要性(笔记)

镀锡废水若直接排放,将对环境、经济和社会造成多重危害,其回收处理具有迫切性和深远意义。以下从环境、资源、法规、技术与实践、可持续发展五大维度展开分析: 一、环境危害的紧迫性:重金属与污染物的致命威胁 成分复杂&#xf…

14.2 - VDMA彩条显示实验之动态时钟

文章目录 1 实验任务2 系统框图3 硬件设计4 软件设计4.1 dynclk_api.h文件4.2 math_compat.h文件4.3 dynclk_api.c文件4.4 main.c文件 1 实验任务 参见14.1。 2 系统框图 参见14.1。 3 硬件设计 注意事项:基于14.1做如下改动 使能Clocking Wizard IP核的Dynam…

在边缘端进行tensorflow模型的部署(小白初探)

1.配置tensorflow的环境 (我是安装GPU版本的) 建议参考这个博主的文章,确实非常快速! 十分钟安装Tensorflow-gpu2.6.0本机CUDA12 以及numpymatplotlib各包版本协调问题_tensorflow cuda12-CSDN博客 2.学习自制数据集 &#xf…

windows下使用nginx + waitress 部署django

架构介绍 linux一般采用nginx uwsgi部署django,在Windows下,可以取代uwsgi的选项包括Waitressa、Daphnea、Hypercoma和Gunicorna(通过WSLa 运行)。windows服务器一般采用nginx waitress 部署django,,他们的关系如下 django是WEB应用…

利用pnpm patch命令实现依赖包热更新:精准打补丁指南

需求场景 在Element Plus的el-table组件二次开发中,需新增列显示/隐藏控件功能。直接修改node_modules源码存在两大痛点: 团队协作时修改无法同步 依赖更新导致自定义代码丢失 解决方案选型 通过patch-package工具实现: 📦 非…

ThinkPad T520 无法读到硬盘 问题排查思路

错误提示:2100:detection error on hdd0(Main hdd) 1、判断错误提示含义 表示电脑在启动时无法检测到主硬盘(HDD0)。 2、 常见原因: 硬盘松动或接触不良 → 特别是笔记本在移动或震动后,硬盘排线松了。 硬盘损坏 →…

Doris部署生产集群最低要求的部署方案

Doris生产集群最低部署方案(2025年4月版) 一、节点规划与数量 1. FE节点(Frontend) 数量:至少 3个节点(1个Follower 2个 Observer),确保高可用(HA)。角色分…

游戏引擎学习第227天

今天的计划 今天的工作重点是进行吸引模式(attract mode)的开发,主要是处理游戏的进出和其他一些小的细节问题,这些是之前想要整理和清理的部分。我做了一些工作,将游戏代码中的不同部分分离到逻辑上独立的区域&#…

spark-SQL数据加载和保存

数据加载与保存 通用方式: 通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式,如 csv 、 jdbc 等; option 用于设置特定参数,像 jdbc 格式下的数据库连接信息; load 和 save 则…

算法升级战报:亚马逊受众定向工具实测点击成本降37%

随着广告成本居高不下,精准投放成为卖家们绕不开的焦虑点。而最近一轮亚马逊DSP广告系统的算法升级,似乎正在给这场投放内卷带来新的转机。在这篇文章中,我们将基于实际测试数据,详细解析亚马逊受众定向工具的表现,并复…

大带宽服务器的优势

大带宽服务器最大的优势就在于可以显著提高数据传输的速度,这对于有着高流量应用和实时数据交换需求的企业来说,大带宽服务器中的带宽越大,所提供的数据传输速度就越快,同时网络的延迟度也会变低,所以大带宽服务器往往…

华为OD机试真题——阿里巴巴找黄金宝箱 IV(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 华为OD机试真题《阿里巴巴找黄金宝箱 IV》: 目录 题目名称&…