Python爬虫——如何使用urllib的HTTP基本库

怎样通过 urllib库 发送 HTTP 请求?

 

urllib库主要由四个模块组成:

  • urllib.request 打开和读取 URL
  • urllib.error 包含 urllib.request 抛出的异常
  • urllib.parse 用于解析 URL
  • urllib.robotparser 用于解析 robots.txt 文件
1. 使用urllib.parse解析URL
  • 使用urlparse()分段URL

  • 在这里,我们用urlparse()函数构建了一个实例对象(ParseResult类型),并将其赋值给result,以便调用。

    事实上,ParseResult类型对象包含6个部分:

    • scheme,代表协议,通常在"://"前面,这里即http
    • netloc,代表域名,通常在第一个"/"前面,这里即docs.python.org:80
    • path,代表访问路径,通常在域名之后,这里即/3/library/urllib.parse.html
    • params,代表参数,通常在"?"之前,这里不存在
    • query,代表查询条件,通常在"?"之后,这里也不存在
    • fragment,代表瞄点,通常在"#"之后,用于直接定位页面内部的下拉位置,这里即url-parsing
  • 使用urlunparse()构造URL

  • 事实上,在urllib.parse中,解析URL的方法不仅有urlparse()函数,还有urlsplit()等;构造URL的方法不仅有urlunparse()函数,还有urlunspliturlencode()等。

2. 使用urllib.request打开 URL,模拟发送请求
  • 使用urllib.request.urlopen函数发送HTTP请求,构造对象

 

  • urllib.request.urlopen 函数构造一个接受请求的实例对象(HTTPResponse类型),并将其赋值给response变量,以便之后使用。

    read()方法可以得到返回的网页内容。事实上,HTTPResponse类型的对象,不仅可以调用read()getheaders()方法,还可以调用statusmsg属性来查看请求发送后返回的一系列信息。

  • 通过Request类灵活配置参数,构建请求信息对象

  • 这里我们依然使用urlopen()方法来发送HTTP请求,但是传递的不再是单纯的URL,而是一个Request类型的对象。通过集合各种参数,将其独立成一个对象,可以更加丰富和灵活地配置参数。

    这里的headers即为请求头,method即为请求方法

  • 使用Handler处理器进行高级操作(以Cookies处理为例)

  • HTTPCookieProcessorurllib.request模块里用于处理Cookie的一个类。值得注意的是这里打开链接的不再是request.urlopen()函数,而是用Opener对象的open()方法来发出请求。

3. 使用urllib.error捕捉请求错误,进行异常处理
  • 使用URLError类捕捉URL异常

     
    • 在这里如果发生网页不存在等请求异常,我们就可以通过URLError捕捉异常,从而避免程序的异常终止

    • 使用HTTPError类捕捉HTTP请求错误

       

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

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

相关文章

centos7.9安装PHP运行环境

MySQL安装 报错:源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 解决: yum install mysql-server -y --nogpgcheck 查询初始密码 grep temporary password /var…

数据中心网络随想-电路交换

数据中心网络扩容并不容易,涉及设备上架,切换等又硬又大的动作,期间对所有应用都会产生影响,所以理论上 “加钱加硬件” 这种看起来很简单的事实际上真不如 “写一个随时部署升级的端到端拥塞控制算法” 更容易实施。 傍晚绕小区…

警惕!红火蚁危机升级:已入侵我国12省份,扩散速度惊人

近年来,红火蚁这一外来入侵物种在我国呈现出了令人担忧的扩张态势,其危害性和扩散速度之迅猛,已引起了社会各界的广泛关注和政府部门的高度警惕。红火蚁作为一种极具破坏力的生物,不仅会对当地的生态环境造成巨大影响,…

【算法】二分查找——二分查找

本节博客详述“二分查找”并且以例子来进行讨论,有需要借鉴即可。 目录 1.二分查找1.1使用前提1.2模板 2.题目3.题解代码示例4.二分查找的一般模板5.总结 1.二分查找 1.1使用前提 使用的条件:数组具有“二段性”,二段性指的是数组可以根据某…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下: 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 ,例如我的个人公众号 htt…

MyBatis的注解实现复杂映射开发

xml 配置方式实现复杂映射回顾 ​ 实现复杂映射我们之前可以在映射文件中通过配置来实现,使用注解开发后,我们可以通过 Results 注解,Result 注解,One 注解和 Many 注解组合完成复杂关系的配置。 注解说明Results代替的是标签 …

举个栗子!Tableau 技巧(273):用葡萄干布丁图(Plum Pudding Chart)查看数据

葡萄干布丁图 / Plum Pudding Chart 葡萄干布丁图(Plum Pudding Chart)源自英国传统的葡萄干布丁,它由多种原料混合而成,每种原料的比例不同,葡萄干布丁图用于展示多种不同类型的数据。 葡萄干布丁图由一系列同心圆环…

mysql的隔离性——MVCC

MVCC通过undolog版本链和readview来实现 更新和删除时会写入undolog中。 读已提交:在事务任意读时创建readview,读最新提交的事务 可重复读:在事务第一次读时创建readview

电力物联网-(2)系统设计

电力物联网系统设计 前言 在此之前写过《电力物联网系统设计》开篇文章,上一篇文章主要的概述性的内容,发表之后总觉得对电力物联网系统设计这一方面还只是开了一个头,没有把相关的内容讲解清楚,于是经过一段时间的构思终于产出了…

千层烤馍,五彩斑斓的甘肃特色美食

甘肃玫瑰千层烤馍是一道具有浓郁地方特色的传统面点,以其独特的口感和精美的外观而闻名。食家巷的千层烤馍更是其中的佼佼者,它采用了优质的原料和传统的制作工艺,让你品尝到最正宗的甘肃味道。 食家巷千层烤馍的制作过程非常讲究&#xff0c…

蓝桥杯-线性动态规划问题背包问题进阶策略详解-奇怪的段

0奇怪的段【算法赛】 - 蓝桥云课 (lanqiao.cn) 基础dp&#xff1a; #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N1e56;typedef long long ll;ll f[N][206]; ll a[N]; ll sum[N]; ll p[206]; int n,k;int main…

Python 和Java 哪个更适合做自动化测试?

Python和Java都是常用于自动化测试的编程语言&#xff0c;它们各有优势和适用场景。本文将从零到一地详细描述Python和Java在自动化测试中的特点和应用。 首先&#xff0c;我们来介绍Python在自动化测试中的优势。 Python是一种简洁、易读且功能强大的编程语言&#xff0c;它…