Python爬虫进阶之如何使用urllib库
这篇文章主要介绍了Python爬虫进阶之如何使用urllib库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
python的数据类型有哪些?
python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。
python爬虫因其效率高开发迅速的优势受到广大程序员的青睐,python爬虫的使用依赖于本身各种库的功能,其中urllib库是python中的一个http请求库,含有四个模块,有着不同的功能,使用方法也有很多,本文向大家介绍urllib库的四个模块和四种使用方法:1、获取某个网站的方式;2、超时处理;3、简单解析-响应头;4、将爬虫伪装成服务器发出请求。
一、urllib库是什么?
urllib是python中的一个http请求库,借助urllib,我们可以向浏览器发出请求,只需向urllib库中的方法传入url和一些参数即可。
urllib库中包含以下模块:
1、urllib.request
http请求模块,用于模拟向浏览器发出请求的过程;
2、urllib.error
异常处理模块,当利用urllib.request模拟向浏览器发出请求时,如果出现请求错误,可以利用此模块捕获异常信息,然后进行重试或其他操作,以保证程序不会意外终止;
3、urllib.parse
包含了针对url的许多处理方法,如url拆分、url解析、url合并等;
4、urllib.robotparser
robots.txt解析模块,主要用于识别网站的robots.txt文件,判断哪些网站可以爬,那些网站不可爬。此模块不太经常被使用。
二、Python爬虫中常用的urllib方法
首先需要导入urllib模块,如下
import urllib.requestimport urllib.parse # 解析器,将键值对按utf-8或其他形式解析
1、获取某个网站的方式
(1)获取一个get请求
response = urllib.request.urlopen("http://www.baidu.com")print(response.read().decode("utf-8")) # 第二行的输出是对获取到的对象response的信息-网页源码进行utf-8的解码
(2)获取pose请求
data = bytes(urllib.parse.urlencode({"hello": "world"}), encoding='utf-8') # 一般模拟用户登录时使用此种方式,在{}内加上cookie内容response = urllib.request.urlopen("https://baidu.com", data=data)print(response.read().decode("utf-8"))
采用post访问时需要传递表单信息,通过表单的封装才能访问post,代码中bytes将信息转换为二进制包。
当需要模拟浏览器发出请求时,必须用post形式来封装数据(用data封装),否则有405报错。
2、超时处理
当要访问的服务器排斥爬虫,或链接是死链接、网络不好等情况出现时,页面在一定的时间内会没有反应,这时可以设置一个时间限制,避免一直等待。
response = urllib.request.urlopen("https://baidu.com", timeout=0.1)print(response.read().decode("utf-8"))
若访问超时会出现如下报错,可以利用异常处理结束循环或者停止爬取该网页,向其他网页发送get请求。
try: response = urllib.request.urlopen("http://www.baidu.com",timeout=0.1) print(response.read().decode("utf-8"))except urllib.error.URLError as e: print("time out!")
3、简单解析-响应头
网络爬虫有时会返回一些错误信息,此时我们可以返回响应状态码来大致判断报错类型。
response = urllib.request.urlopen("http://www.baidu.com")print(response.status) # 返回状态码-200、404、418等print(response.getheaders()) # 返回头部所有信息
常见的状态码如418报错是因为访问的服务器发现该请求是一个爬虫,也即爬虫时常见的反爬机制,此时可改用requests库、添加header信息等方法解决。
4、将爬虫伪装成服务器发出请求
# 访问反爬的网址url = "http://www.douban.com"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"}req = urllib.request.Request(url=url, headers=headers, method="POST") # req是请求对象而非响应对象response = urllib.request.urlopen(req)html = response.read().decode("utf-8")print(html)
代码中的headers来自浏览器页面,在chrome中进入想访问的浏览页面,点击F12或右键检查-Network中,即可查到User-Agent信息,粘贴到代码中(需注意大小写及空格,代码中的格式要和浏览器信息一致)。
user-agent的作用是告诉所访问的服务器,我们是何种类型的机器(浏览器),若只用User-Agent会返回百度验证界面,可加入Cookie返回所要爬取的结果页面
三、爬虫频率过快导致失败
现在很多网站对异常用户访问网站频次过高设置了安全访问机制。在这个时候,如果你想继续访问这个网站,HTTP代理ip非常重要。当前ip地址有限,可以更改新的ip地址,保证爬虫的顺利进行。
推荐使用优质的代理ip资源,保证爬虫程序的顺利进行。
感谢你能够认真阅读完这篇文章,希望小编分享的“Python爬虫进阶之如何使用urllib库”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341