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

Irene181
• 阅读 2815

一、前言

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

那它们两者有什么区别 ?

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

二、urllib库

简介:

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

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

from urllib import request
#请求头
headers = {
    "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'
}
wd = {"wd": "中国"}
url = "http://www.baidu.com/s?"
req = request.Request(url, headers=headers)
response = request.urlopen(req)
print(type(response))
print(response)
res = response.read().decode()
print(type(res))
print(res)

运行结果:

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

注意:

通常爬取网页,在构造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请求,再发起。

例:

import requests

headers = {
    "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"
}
wd = {"wd": "中国"}
url = "http://www.baidu.com/s?"
response = requests.get(url, params=wd, headers=headers)
data = response.text
data2 = response.content
print(response)
print(type(response))
print(data)
print(type(data))
print(data2)
print(type(data2))
print(data2.decode())
print(type(data2.decode()))

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

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

四、总结

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

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

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

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

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

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

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

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/lvI-nWipEG6pfyzfepbTQg,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Aimerl0 Aimerl0
3年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
Python中Requests库的高级用法
前面讲了Python的urllib库的使用和方法,Python网络数据采集Urllib库的基本使用,Python的urllib高级用法。今天我们来学习下Python中Requests库的用法。(官方手册(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fdocs.pythonreq
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python自带爬虫库urllib使用大全
击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤门前冷落鞍马稀,老大嫁作商人妇。这篇文章主要来讲解下Python自带的爬虫库urllib常见用法,主要围绕urllib定义、urllib的常用模块和urlliblxml爬虫案例三个部分进行展开。
Stella981 Stella981
3年前
Python爬取网易云歌单
基本配置:Python版本:3.7相关模块:from urllib import parsefrom lxml import etreefrom urllib3 import disable_warningsimport requests案例关键点:使用单线程爬取,未登录,爬取网易云
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
3年前
Python爬虫初学
学习爬虫中,从最近自己写的爬虫小程序中抓截一点代码。加深下记忆。1.因为我已经安装了Python3,所以使用了urllib3库。2.要根据对应网页的数据格式进行解码,有的是utf8,有的是GB2312,当然可能还有其它。否则会报错。import urllib3import time因为我使用了Python3,所以使用urlli
python使用最广泛的库介绍
python真的是很好的语言,首先python为我们封装了很多简单又实用的爬虫库。所以今天博主就带领大家认真的学习下python中被广泛实用的爬虫库——requests库。专为python而建,python有史以来被下载的最多的库之一。requests是一