浅谈Python两大爬虫库—urllib库和requests库区别

开发 后端
本文基于Python基础,主要介绍了urllib库和requests库的区别。在使用urllib内的request模块时,返回体获取有效信息和请求体的拼接需要decode和encode后再进行装载。进行http请求时需先构造get或者post请求再进行调用,header等头文件也需先进行构造。

[[400370]]

一、前言

在使用Python爬虫时,需要模拟发起网络请求,主要用到的库有requests库和python内置的urllib库,一般建议使用requests,它是对urllib的再次封装。

那它们两者有什么区别 ?

下面通过案例详细的讲解 ,了解他们使用的主要区别。

二、urllib库

简介:

urllib库的response对象是先创建http,request对象,装载到reques.urlopen里完成http请求。

返回的是http,response对象,实际上是html属性。使用.read().decode()解码后转化成了str字符串类型,decode解码后中文字符能够显示出来。

  1. from urllib import request 
  2. #请求头 
  3. headers = { 
  4.     "User-Agent"'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36' 
  5. wd = {"wd""中国"
  6. url = "http://www.baidu.com/s?" 
  7. req = request.Request(url, headers=headers) 
  8. response = request.urlopen(req) 
  9. print(type(response)) 
  10. print(response) 
  11. res = response.read().decode() 
  12. print(type(res)) 
  13. print(res) 

运行结果:

注意:

通常爬取网页,在构造http请求的时候,都需要加上一些额外信息,什么Useragent,cookie等之类的信息,或者添加代理服务器。往往这些都是一些必要的反爬机制。

三、requests库

简介:

requests库调用是requests.get方法传入url和参数,返回的对象是Response对象,打印出来是显示响应状态码。

通过.text 方法可以返回是unicode 型的数据,一般是在网页的header中定义的编码形式,而content返回的是bytes,二级制型的数据,还有 .json方法也可以返回json字符串。

如果想要提取文本就用text,但是如果你想要提取图片、文件等二进制文件,就要用content,当然decode之后,中文字符也会正常显示。

requests的优势:

Python爬虫时,更建议用requests库。因为requests比urllib更为便捷,requests可以直接构造get,post请求并发起,而urllib.request只能先构造get,post请求,再发起。

例:

  1. import requests 
  2.  
  3. headers = { 
  4.     "User-Agent""Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36" 
  5. wd = {"wd""中国"
  6. url = "http://www.baidu.com/s?" 
  7. response = requests.get(url, params=wd, headers=headers) 
  8. data = response.text 
  9. data2 = response.content 
  10. print(response) 
  11. print(type(response)) 
  12. print(data) 
  13. print(type(data)) 
  14. print(data2) 
  15. print(type(data2)) 
  16. print(data2.decode()) 
  17. print(type(data2.decode())) 

运行结果 (可以直接获取整网页的信息,打印控制台):

四、总结

本文基于Python基础,主要介绍了urllib库和requests库的区别。

在使用urllib内的request模块时,返回体获取有效信息和请求体的拼接需要decode和encode后再进行装载。进行http请求时需先构造get或者post请求再进行调用,header等头文件也需先进行构造。

requests是对urllib的进一步封装,因此在使用上显得更加的便捷,建议在实际应用当中尽量使用requests。

希望能给一些对爬虫感兴趣,有一个具体的概念。方法只是一种工具,试着去爬一爬会更容易上手,网络也会有很多的坑,做爬虫更需要大量的经验来应付复杂的网络情况。

希望大家一起探讨学习, 一起进步。

 

责任编辑:姜华 来源: Python爬虫与数据挖掘
相关推荐

2010-09-07 16:46:25

H.323SIP

2010-07-15 14:25:06

Perl时间函数

2010-09-16 09:33:33

CSS displayCSS display

2023-11-27 08:51:46

PythonRequests库

2017-09-13 15:37:53

2018-10-15 16:30:14

数据库索引Mysql

2009-07-20 09:27:42

IBATIS.netDAO

2015-07-09 09:34:24

2014-12-23 09:57:29

配线架

2021-07-21 08:59:10

requestsPython协程

2009-06-12 16:24:44

Hibernate lHibernate g

2017-03-10 10:16:37

PythonRequests库

2020-11-10 22:46:41

图形数据库数据库扩展

2011-05-25 15:16:55

非结构化数据库异构数据库

2010-03-12 08:59:40

Python代码

2009-11-30 16:55:10

微软合作Novell

2011-07-01 10:42:51

IIS解析漏洞

2023-05-09 08:18:07

Python开发技巧

2020-10-15 14:11:18

安全和隐私

2010-09-10 09:42:37

borderclearCSS
点赞
收藏

51CTO技术栈公众号