自学Python 62 使用urllib 包并获取百度搜索关键词中得到链接

news/2024/4/29 3:09:16/文章来源:https://blog.csdn.net/weixin_46066007/article/details/126917949

Python 使用urllib 包


文章目录

  • Python 使用urllib 包
  • 一、urllib 包介绍
  • 二、使用urllib.request模块
  • 三、使用urllib.parse模块


  在计算机网络模型中,Socket套接字编程属于底层网络协议开发的内容。虽然说编写网络程序需要从底层开始构建,但是自行处理相关协议是一件比较麻烦的事情。其实对于大多数序员来说,最常见的网络编程开发是针对应用协议进行的。在Python程序中,使用内置包 urllib 和 http 可以完成HTTP协议层程序的开发工作。在本节的内容中,将详细讲解使用包 urllib 开发Python 应用程序的知识。


一、urllib 包介绍

  在 Python程序中,urllib包主要用于处理URL (uniform resource Locator,网址)操作,使用urllib操作URL可以像使用和打开本地文件一样的操作,非常简单而又易上手。在包urllib中主要包括如下表所示的模块。

模块名称描述
urllib.requcst用于打开URL网址
urllib.error用于定义常见的urllib.requcst会引发的异常
urllib.parse用于解析URL
urllib.robotparser用于解析robots.txt文件

二、使用urllib.request模块

  在python程序中,urllib.request模块定义了通过身份验证,重定向、cokies 等方法打开URL的方法和类。模块urllib.request中的常用方法如下所示:

  (1)方法urlopen( )
  在urllib.request模块中,方法urlopen()的功能是打开一个URL地址,语法格式如下所示:

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

 ● url: 表示要进行操作的URL地址;
 ● data: 用于向URL传递的数据,是一个可选参数;
 ● timeout: 这是一个可选参数,功能是指定一个超时时间。 如果超过该时间,任何操作都会被阻止。这个参数仅仅对 http、https 和 ftp 连接有效;
 ● context: 此参数必须是一个描述各种SSL选项的ssl.SSLContexst实例。

  方法urlopen()将返回一个HTTPResponse实例(类文件对象),可以像操作文件一样使用read()、readline()和close()等方法对URL进行操作。
  方法urlopen()能够打开url所指向的URL。如果没有给定协议或者下载方案(Scheme),或者传入了“file”方案,urlopen() 会打开个本地文件。

  (2)方法urllib.request.install_opener(opener)
  功能是安装opener作为urlopen()使用的全局URL opener,这意味着以后调用urlopen()时都会使用安装的opener对象。opener 通常是build_opener() 创建的opener对象。

  (3)方法urlib.requcst.build_opener([handler, …])
  返回OpenerDirector实例,按所给定的顺序链接处理程序。handler 可以是BaseHandler的实例或BaseHandler的子类( 在这种情况下,必须可以调用没有任何参数的构造函数)。以下类的实例将在handler 前面,除非handler包含它们的实例或它们的子类:
  ProxyHandler (如果检测到代理设置),UnknownHandler, HTTPHandler, HTTPDefault ErrorHandler, HTTPRediretHandler, FTPHandler,FileHandler, HTTPErrorProcessor。

  (4)方法urllib.request.pathname2url(path)
  功能是将路径名转换成路径,从本地语法形式的路径中使用一个 URL的路径组成部分。这不会产生一个完整的 URL。它将返回引用quote()函数的值。

  (5)方法urlilb.request.url2pathname(path)
  功能是将路径组件转换为本地路径的语法,此方法不接受一个完整的URL。这个函数使用unquote()解码的通路。

  (6)方法urllib.request.getproxies()
  功能是返回个日程表 Dictionary去代理服务器的URL映射。它首先针对所有操作系统,以不区分大小写的方式扫描环境中名为< schemes>_proxy 的变量,并且在找不到它时,从Mac OSX System Configuration for Mac中查找代理信息OS X和Windows系统注册表。如果小写和大写环境变量存在(且不同意),则首选小写。

  在下面的实例中,演示了使用urlopen()方法在百度搜索关键词中得到第一页链接的过程:

from urllib.parse import urlencode      #导入Python的内置模块
from urllib import request
import re
# #wd = input('输入一个要搜索的关键字:')
wd='www.csdn.net'      #初始化变量wd
wd = urlencode({'wd':wd})       #对URL进行编码
url = 'http://www.baidu.com/s?' + wd           #初格化url变量
print(url)
page = request.urlopen(url).read() #打开变量url的网页并读取内容
#定义变量content,对网页进于编码处理,并实现特珠字符处理
content = (page.decode('utf-8')).replace("\n","").replace("\t","")
title = re.findall(r'<h3 class=.*?h3>',content)
#正则表达式处理(摘取需要的链接)
title = [item[item.find('href=')+6:item.find('data-')] for item in title]
title = [item.replace(' ',' ').replace('"',' ')for item in title]
#正则表达式处理
for item in title:      #遍历titleprint(item)     #打印显示遍历值

  在上述实例代码中,使用方法urlencode()对搜索的关键字“www.csdn.net”进行URL编码,在拼接到百度的网址后,使用urlopen()方法发出访间请求并取得结果,最后通过将结果进行解码和正则搜索与字符串处理后输出。如果将程序中的注释去除而把其后一句注释掉, 就可以在运行时自主输入搜索的关键词。执行效果如图所示:
在这里插入图片描述
  自主搜索的执行图:
在这里插入图片描述

三、使用urllib.parse模块

  在pybon程序中,urllib.parse模块提供了一些用于处理URL字符串的功能。这些功能主要是通过如下所示的方法实现的。
  (1)方法urlpasrse.urlparse()
  方法urlparse()的功能是将URL字符串拆分成前面描述的一些主要组件, 其语法结构如下所示。

urlparse (urlstr, defProtSch=None, allowFrag=None)

  方法urlparse()将urlstr 解析成一个6元组(prot_sch, net_loc, path,params, qucIy, frag)。如果在urlstr中没有提供默认的网络协议或下载方案,defProtSch会指定一个默认的网络协议。allowFrag用于标识一个 URL是否允许使用片段。例如下边是一个给定URL经urlparse()后的输出。

from urllib.parse import urlparse
result =urlparse ('http://www.python.org/doc/FAQ.html')
print(result)

在这里插入图片描述

  (2)方法 urlparse.urlunparse( )
  方法urlunparse()的功能与方法 urlpase()完全相反,能够将经url处理的URL生成urltup这个6元组(prot_sch, net_loc, path, params, query, frag),拼接成URL并返回。可以用如下所示的方式表示其等价性:

urlunparse (urlparse(urlstr))=urlstr

  下面是使用urlunpase()的语法:

urlunparse (urltup)

  (3)方法urlparse.urljoin()
  在需要处理多个相关的URL时需要使用urljoin()方法的功能,例如在一个 Web页中可能会产生一系列页面的 URL。方法urljoin()的语法格式如下所示:

urljoin (baseurl, newurl,allowFrag=None)

  方法urljoin()能够取得根域名,并将其根路径(net_loc及其前面的完整路径,但是不包括末端的文件)与newurl连接起来。例如下面的演示过程:

from urllib.parse import urljoin
result =urljoin( 'http://PYthon.org/doc/FAQ.html','current/lib/lib.htm')   

在这里插入图片描述

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

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

相关文章

【图像分类】基于HOG特征结合SVM实现图像分类识别附matlab代码

1 内容介绍 ​为了满足人工智能在目标识别方法中的应用需求,需要具备对海量数据进行智能分类、识别、判读的能力.进一步挖掘了目标特性数据库数据,并将基于HOGSVM的目标识别算法应用于红外目标识别过程中.选择采集到的汽车、直升机、飞机、舰船、无人机等目标,并结合HOG算子与…

【Vite 实践】Vite 库模式能满足你吗?或许你需要统一构建

2022 年本人投入了 Vite 的怀抱&#xff0c;开始参与到 Vite 社区中&#xff0c;陆续开发了一些插件。 Vite 秉承了开箱即用&#xff0c;简化配置的思路&#xff0c;确实显著提升了前端开发体验。 但是在类库模式的构建上却有所欠缺&#xff0c;只能处理单个输入和单输入出的…

个人笔记--数据库理论 01 关系模型介绍——基于《数据库系统概念》第七版

关系模式 关系的例子 关系模型是目前广泛应用的数据模型由表的集合构成 例如 IDnamedpt_namesalary11111JAMCS12345 元组 tuple&#xff1a;表中的一行&#xff0c;元素无所谓属性 attribute : 原子的&#xff0c;不可再分的&#xff0c;要有属性域&#xff0c;如上表的nam…

云原生爱好者周刊:延迟加载任意 OCI 镜像 | 2022-09-13

开源项目推荐 SOCI Snapshotter SOCI Snapshotter 是一个 Containerd Snapshotter 插件&#xff0c;可以延迟加载任意 OCI 镜像&#xff0c;不需要 Stargz Snapshotter 一样构建特殊格式的镜像才能延迟加载。 Authentication Proxy 这个项目使用 YARP (Yet Another Reverse…

Git的认识和使用

目录 一、前置准备 二、git简介 三、gitee.com的基本使用 1.创建仓库(私库和公库) 2.创建文件及文件夹 新建文件夹两种方式 ①​ ② 3.删除 删除文件 删除仓库 四、组长组员的git使用 git clone 查看文件 git status git add git commit git push ## 命令行配置 多个…

葡聚糖-MAL/NHS/N3/Alkyne/SH/Biotin/CHO/OPSS/OH

产品名称&#xff1a; 葡聚糖-马来酰亚胺&#xff0c;葡聚糖-MAL&#xff0c;马来酰亚胺功能化葡聚糖 英文名称&#xff1a;Dextran-MAL PEG分子量可选&#xff1a;350,550,750,1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k&#xff08;可…

[仅需1步]企业微信群机器人[0基础接入][java]

[仅需1步]企业微信群机器人[0基础接入][java]背景介绍使用测试项目背景 公司需要把日常的服务器错误抛到企业微信群中,我正好记录下使用企业微信群机器人… 介绍 企业微信群机器人 应用介绍 企业微信是腾讯微信团队打造的企业通讯与办公工具&#xff0c;具有与微信一致的沟…

医院检验LIS系统源码

医院lis源码 实验室信息管理系统源码 .net检验系统源码 医院系统源码 了解更多源码内容&#xff0c;可私信我。 开发环境&#xff1a;.NET4.0 WPF VS2017或VS2019SQL2016 实验室信息管理系统以条码标本为主线&#xff0c;实现从采集、检测、报告、归档的全程跟踪管理。 支持…

DevOps自动化测试的原则和实践

DevOps是为了在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间。在对系统进行变更时&#xff0c;质量很重要。高质量才能让业务价值传递到系统干系人。『自动化测试既是提高质量的一种重要手段&#xff0c;也是实施持续测试必需的能力&#xff0c;因此它是DevOps…

修改WebBrowser控件的内核解决方案

首先说一下原理 当下很大浏览器他们都是用了IE的core, 这个core只提供HTML/JS的执行和渲染,并没有给出关于界面和一些特性上的事,所以开发自己浏览器如果基于IE core需要自己完成这些内容。 一张图很好的说明了这个情况,IE浏览器的架构:http://msdn.microsoft.com/en-us/li…

nginx - 负载均衡配置-负载均衡策略

目录 知识点1&#xff1a;网站流量分析指标 什么是pv&#xff1f; 什么是uv&#xff1f; 什么是IP&#xff1f; 知识点2&#xff1a;正向代理和反向代理 知识点3&#xff1a;负载均衡实验 IP地址规划&#xff1a; 实验拓扑图 知识点4&#xff1a;负载均衡策略 1、请求…

Spring5.3学习——from 官网 day1-1

Spring5.3学习——from 官网day1-1Spring5.3学习——from 官网day1-1前言概述Spring的设计理念Spring核心&#xff1a;IOC什么是IOC解释IOC容器的包什么是BeanBeanFactory接口简述ApplicationContext接口简述BeanFactory源码描述以下是Bean工厂创建和销毁bean的完整生命周期流程…

Matlab论文插图绘制模板第48期—平行坐标图(Parallelplot)

​上一期文章中&#xff0c;分享了Matlab帕累托图的绘制模板&#xff1a; 这一次&#xff0c;再来分享一种特殊的线图&#xff1a;平行坐标图。 ‘平行坐标图是一种通常的可视化方法&#xff0c;用于对高维几何和多元数据的可视化……为了克服传统的笛卡尔直角坐标系容易耗尽空…

好心情精神心理科:80%双相情感障碍被误诊,千万注意鉴别

双相情感障碍又称躁郁症&#xff0c;其表现复杂&#xff0c;容易与其他精神疾病&#xff08;包括边缘型人格障碍&#xff09;相混淆&#xff0c;超过80%的患者未能得到正确诊断。 具体如何区分双相情感障碍与边缘型人格障碍&#xff1f;在回答这个问题之前&#xff0c;好心情精…

从规模走向规模经济,锅圈食汇回归餐饮初心

预制菜源自美国&#xff0c;在日本因冷链技术发展而普及。后疫情时代&#xff0c;预制菜在中国餐饮市场加速渗透&#xff0c;成为行业的新风向。 9月&#xff0c;第一财经与CBNData发布“Growth502022中国新消费品牌年度增长力榜单”&#xff0c;预制菜品牌锅圈食汇入选。 锅…

设计模式学习笔记--责任链模式

责任链模式 责任链模式是一种对象的行为模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递&#xff0c;直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&…

Tuxera NTFS21Mac苹果电脑读取硬盘磁盘软件

我们经常会使用移动硬盘或 U 盘进行大体积文件的分享、携带。但有时候别人提供的NTFS移动硬盘或者U 盘在 Mac 电脑中只能读取&#xff0c;无法将文件导入到其中。这是因为常见的 NTFS 硬盘格式在 Mac 中不能兼容。 当你从 Windows 转到了 Mac 平台&#xff0c;可能会发现之前用…

RocketMQ-流程图-概念

文章目录RocketMq的角色消息发送的流程RocketMq的角色 Producer&#xff1a;消息的发送者&#xff0c;生产者&#xff1b;举例&#xff1a;发件人Consumer&#xff1a;消息接收者&#xff0c;消费者&#xff1b;举例&#xff1a;收件人Broker&#xff1a;暂存和传输消息的通道…

Python数据分析教程(一):Numpy

数据的纬度 一维数据:列表和集合类型二维数据:列表类型多维数据:列表类型高维数据:字典类型或数据表示格式,如json、xml、yaml维度:一组数据的组织形式列表和数组:一组数据的有序结构Numpy Numpy介绍NumPy是一个开源的Python科学计算基础库,包含:一个强大的N维数组对象…

渗透测试神器Nmap使用教程

渗透测试神器Nmap使用教程1.nmap简介2.常用参数3.nmap实战命令1.nmap简介 Nmap &#xff08;网络映射器&#xff09;是Gordon Lyon最初编写的一种安全扫描器&#xff0c;用于发现计算机网络上的主机和服务&#xff0c;从而创建网络的“映射”。为了实现其目标&#xff0c;Nmap…