Python 爬虫从入门到进阶之路(四)
之前的文章我们做了一个简单的例子爬取了百度首页的 html,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,所以我们需要用到 Python 的 opener 来自定义我们的请求内容。
具体步骤:
- 使用相关的
Handler处理器
来创建特定功能的处理器对象; - 然后通过
build_opener()
方法使用这些处理器对象,创建自定义opener对象; - 使用自定义的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 爬虫从入门到进阶之路(四)相关推荐
- python爬虫入门-Python 爬虫从入门到进阶之路(一)
通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...
- Python 爬虫从入门到进阶之路(七)
在之前的文章中我们一直用到的库是 urllib.request,该库已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 "HTTP fo ...
- python爬虫从入门到实战笔记——第四章Scrapy框架
推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...
- pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)
之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取<糗事百科>的糗事. 之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了, ...
- Python爬虫从入门到进阶(2)之urllib库的使用
1.什么是Urllib(官网地址:https://docs.python.org/3/library/urllib.html#module-urllib) Urllib是python内置的HTTP请求 ...
- Python爬虫零基础到进阶(课程说明)
Python爬虫零基础到进阶 课程介绍总结 学-练-问 跟着学.多做多练.不懂就问.坚持就是胜利! 作业 飞书布置,作业提交放到群里,老师批改. 代码量 python基础: 十一次课,学会python ...
- python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...
- python flask快速入门与进阶 百度云_Python Flask快速入门与进阶
课程目录 1-1 Python Flask快速入门与进阶.mp4 2-1 windows环境安装开发环境 (上).mp4 2-2 windows环境安装开发环境 (下).mp4 2-3 配置开发环境. ...
- Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
最新文章
- 不会但一定要了解的方面,python列表解析方式
- [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解
- STL - bitset
- 前向渲染路径细节 Forward Rendering Path Details
- 使用Spock 1.2简化对遗留应用程序的集成测试
- OpenSSH 远程拒绝服务漏洞
- python黑白棋结课设计报告_黑白棋游戏课程设计
- mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》
- 高并发下如何生成唯一订单号?
- Shell 字符串处理、获取文件名和后缀名
- 华为在鸿蒙的另一张王牌,华为的这两张王牌,将助力Mate40系列角逐安卓机皇的位置...
- 《电子元器件的可靠性》——3.7节电子元器件失效率鉴定试验
- Keras AlexNet 网络实现 Kaggle 猫狗大战
- linux 每日学一点《linux性能测试初步概况》
- 什么是 NAS? 为什么要用 NAS?有什么好玩的功能?
- 流媒体学习之路——Google的新拥塞算法SQP详解(编写中)
- COSOSWAP的这份NFT防盗指南,请给周杰伦转发
- MySQL Workbench中PK,NN,UQ,BIN,UN,ZF,AI,G字段类型标识说明
- 悟空问答如何高效引流,这几个技巧让你上首页
- 不知道Android开发中有哪些权限?看这里
热门文章
- bmp280c语言程序,51单片机读取BMP280 180 280气压值1602显示程序
- 爸爸和儿子的故事带你理解java线程
- 我开发的kvm虚拟化虚拟机批量生产脚本
- maven安装以及常用配置,idea如何配置maven
- 头文件malloc.h:函数 mallopt()的选项
- 知乎App有哪些非常“贴心”的UI设计
- nftables-howto-zh中文手册(不完整)
- 汽车编程都是用matlab,MATLAB编程与汽车仿真应用
- esri-leaflet入门教程(1)-leaflet介绍
- 转载:python能用来做什么?