为了逐步系统深入地学习Python定量城市研究与计算社会科学,我将再从一些基础知识开始学起,后续将由浅入深,逐步更新学习笔记。尤其对一些试图入门Python和计算社会科学的朋友,可以关注赐教。
请求库是Python爬虫开发中不可缺少的工具之一,通过向网站发送HTTP请求并获取响应数据,可以从网站上抓取数据,这是爬虫的重要功能之一。本次,将介绍Python中常用的两个请求库:urllib和requests,以及它们的基本用法和区别。
urllib
urllib是Python内置的HTTP请求库,它的功能比较全面,可以满足大部分爬虫的需求。urllib库包含以下四个模块:
- urllib.request:最基本的HTTP请求模块,可以用它来模拟发送请求。urllib.error:异常处理模块,如果请求错误,可以捕获异常,然后重试其他操作保证程序不会意外终止。
- urllib.parse:工具模块,提供了许多URL处理方法,例如:合并、拆分、解析。
- urllib.robotparser:较少使用,识别网站的robots.txt文件,然后判断哪些网站可以爬。以下是一个使用urllib库进行HTTP请求的例子:
import?urllib.request
url?=?"https://www.baidu.com"
response?=?urllib.request.urlopen(url)
html?=?response.read().decode('utf-8')
print(html)
在这个例子中,首先我们使用urllib.request.urlopen()方法打开网页,并将返回的response对象保存到变量response中。
然后调用read()方法读取响应内容,最后使用decode()方法将响应内容从字节码转换为字符串,输出响应内容。向百度请求的结果如下:
requests
requests是一个非常流行的Python HTTP请求库,通常比urllib更简洁和易用。requests库自动处理许多HTTP细节,例如cookies和headers等,让用户更加专注于爬取数据。
- requests.get()方法是requests模块中最常用的方法之一,它可以用来向一个URL发送GET请求,并返回一个Response对象。它有以下几个参数:
以下代码示例使用requests库发起请求并输出响应内容:
import?requests
url?=?"https://www.bilibili.com/"
try:
????response?=?requests.get(url)
????response.raise_for_status()????#?判断返回的response状态
????response.encoding?=?response.apparent_encoding
????print(response.text[:500])
except:
????print("爬取失败")
在这个例子中,首先我们使用requests.get()方法打开指定的网页,并将返回的响应对象保存到变量response中。然后使用text属性获取响应内容,输出响应内容。向bilibili请求的结果如下:
requests与urllib对比
requests库和urllib库都是Python中常用的HTTP请求库,但它们有以下几点不同:
- requests库更加简洁易用,只需要一行代码就可以完成请求和响应的处理;而urllib库需要更多的代码来构造请求对象和处理响应数据;
- requests库支持更多的请求方法和参数传递方式;而urllib库只支持基本的GET和POST方法,并且需要手动编码和解码数据;
- requests库支持更多的身份认证方式和文件上传下载方式;而urllib库只支持基本的授权验证,并且需要借助其他模块来实现文件上传下载功能;
- requests库支持更多的高级功能,如Cookie自动处理、处理、文件上传、SSL验证等,不需要额外的模块支持。
如果觉得有用就“分享、收藏、在看、点赞 ”吧