之前的文章我们做了一个简单的例子爬取了百度首页的 html,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,所以我们需要用到 Python 的 opener 来自定义我们的请求内容。

具体步骤:

  1. 使用相关的 Handler处理器 来创建特定功能的处理器对象;
  2. 然后通过 build_opener()方法使用这些处理器对象,创建自定义opener对象;
  3. 使用自定义的opener对象,调用open()方法发送请求。

我们先来回顾一下使用 urlopen 获取百度首页的 html 代码实例:

 1 # 导入urllib 库
 2 import urllib.request
 3
 4 # url 作为Request()方法的参数,构造并返回一个Request对象
 5 request = urllib.request.Request("http://www.baidu.com")
 6 # Request对象作为urlopen()方法的参数,发送给服务器并接收响应
 7 response = urllib.request.urlopen(request)
 8 # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
 9 html = response.read().decode("utf-8")
10 # 打印字符串
11 print(html)

接下来我们看一下使用 opener 的处理方式:

 1 from urllib import request
 2
 3 # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
 4 http_handler = request.HTTPHandler()
 5
 6 # 构建一个HTTPSHandler 处理器对象,支持处理HTTPS请求
 7 # http_handler = request.HTTPSHandler()
 8
 9 # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
10 opener = request.build_opener(http_handler)
11
12 # 构建 Request请求
13 request = request.Request("http://www.baidu.com/")
14
15 # 调用自定义opener对象的open()方法,发送request请求
16 response = opener.open(request)
17
18 # 获取服务器响应内容
19 html = response.read().decode("utf-8")
20
21 # 打印字符串
22 print(html)

在上面的第一段代码中,我们是通过直接  import urllib.request   来导入我们需要的包,这样当我们要使用时需要   urllib.request   来使用,第二段代码我们是通过  from urllib import request  来导入我们需要的包,这样当我们使用时直接  request 来使用就可以了。

第一段代码在前面的文章中我们已经说过了,这里就不多做解释了。

第二段代码中,我们使用了 opener 的方法来处理我们的请求,这样我们就可以对代理,cookie 等做进一步的操作,后续文章会讲到。最终结果如下:

在  http_handler = request.HTTPHandler() 中,我们还可以添加一个  debuglevel=1 参数,会将 Debug Log 打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。

代码如下:

 1 from urllib import request
 2
 3 # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
 4 http_handler = request.HTTPHandler(debuglevel=1)
 5
 6 # 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
 7 # http_handler = request.HTTPSHandler(debuglevel=1)
 8
 9 # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
10 opener = request.build_opener(http_handler)
11
12 # 构建 Request请求
13 request = request.Request("http://www.baidu.com/")
14
15 # 调用自定义opener对象的open()方法,发送request请求
16 response = opener.open(request)
17
18 # 获取服务器响应内容
19 html = response.read().decode("utf-8")
20
21 # 打印字符串
22 print(html)

输出结果如下:

可以看出在响应结果的时候会为我们打印输出一些请求信息。

转载于:https://www.cnblogs.com/weijiutao/p/10749508.html

Python 爬虫从入门到进阶之路(四)相关推荐

  1. python爬虫入门-Python 爬虫从入门到进阶之路(一)

    通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...

  2. Python 爬虫从入门到进阶之路(七)

    在之前的文章中我们一直用到的库是 urllib.request,该库已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 "HTTP fo ...

  3. python爬虫从入门到实战笔记——第四章Scrapy框架

    推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...

  4. pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)

    之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取<糗事百科>的糗事. 之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了, ...

  5. Python爬虫从入门到进阶(2)之urllib库的使用

    1.什么是Urllib(官网地址:https://docs.python.org/3/library/urllib.html#module-urllib) Urllib是python内置的HTTP请求 ...

  6. Python爬虫零基础到进阶(课程说明)

    Python爬虫零基础到进阶 课程介绍总结 学-练-问 跟着学.多做多练.不懂就问.坚持就是胜利! 作业 飞书布置,作业提交放到群里,老师批改. 代码量 python基础: 十一次课,学会python ...

  7. python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)

    原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...

  8. python flask快速入门与进阶 百度云_Python Flask快速入门与进阶

    课程目录 1-1 Python Flask快速入门与进阶.mp4 2-1 windows环境安装开发环境 (上).mp4 2-2 windows环境安装开发环境 (下).mp4 2-3 配置开发环境. ...

  9. Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

最新文章

  1. 不会但一定要了解的方面,python列表解析方式
  2. [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解
  3. STL - bitset
  4. 前向渲染路径细节 Forward Rendering Path Details
  5. 使用Spock 1.2简化对遗留应用程序的集成测试
  6. OpenSSH 远程拒绝服务漏洞
  7. python黑白棋结课设计报告_黑白棋游戏课程设计
  8. mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》
  9. 高并发下如何生成唯一订单号?
  10. Shell 字符串处理、获取文件名和后缀名
  11. 华为在鸿蒙的另一张王牌,华为的这两张王牌,将助力Mate40系列角逐安卓机皇的位置...
  12. 《电子元器件的可靠性》——3.7节电子元器件失效率鉴定试验
  13. Keras AlexNet 网络实现 Kaggle 猫狗大战
  14. linux 每日学一点《linux性能测试初步概况》
  15. 什么是 NAS? 为什么要用 NAS?有什么好玩的功能?
  16. 流媒体学习之路——Google的新拥塞算法SQP详解(编写中)
  17. COSOSWAP的这份NFT防盗指南,请给周杰伦转发
  18. MySQL Workbench中PK,NN,UQ,BIN,UN,ZF,AI,G字段类型标识说明
  19. 悟空问答如何高效引流,这几个技巧让你上首页
  20. 不知道Android开发中有哪些权限?看这里

热门文章

  1. bmp280c语言程序,51单片机读取BMP280 180 280气压值1602显示程序
  2. 爸爸和儿子的故事带你理解java线程
  3. 我开发的kvm虚拟化虚拟机批量生产脚本
  4. maven安装以及常用配置,idea如何配置maven
  5. 头文件malloc.h:函数 mallopt()的选项
  6. 知乎App有哪些非常“贴心”的UI设计
  7. nftables-howto-zh中文手册(不完整)
  8. 汽车编程都是用matlab,MATLAB编程与汽车仿真应用
  9. esri-leaflet入门教程(1)-leaflet介绍
  10. 转载:python能用来做什么?