1、前言使用Python爬虫时,需要模拟发起网络请求。主要用到的库是requests库和python内置的urllib库。一般推荐使用requests,requests是对urllib的重新封装。那么两者有什么区别呢?下面通过案例详细讲解,了解它们在使用上的主要区别。2、urllib库介绍:urllib库的response对象是先创建http和request对象,加载到requests.urlopen中完成http请求。返回的是http,response对象,其实就是html属性。使用.read().decode()解码,转换成str字符串类型,解码后可以显示汉字。来自urllibimportrequest#Requestheaderheaders={"User-Agent":'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/64.0.3282.186Safari/537.36'}wd={"wd":"China"}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)运行结果:注:通常在爬取网页时,构造http请求时需要添加一些额外的信息。Useragent、cookie等信息,或者添加代理服务器。这些通常是必要的反攀爬机制。3、requests库介绍:requests库调用requests.get方法传入url和参数,返回对象为Response对象,打印出来显示响应状态码。.text方法可以返回unicode类型的数据,一般是网页头部定义的编码形式,而content返回字节,二级数据,.json方法也可以返回json字符串。如果要提取文本,就用text,但是如果要提取图片、文件等二进制文件,就必须用content。当然解码后,汉字也会正常显示。requests的优点:使用Python爬虫时,推荐使用requests库。因为requests比urllib方便,requests可以直接构造get和post请求并发起,而urllib.request只能先构造get和post请求,然后发起。示例:importrequestsheaders={"User-Agent":"Mozilla/5.0(Linux;U;Android8.1.0;zh-cn;BLA-AL00Build/HUAWEIBLA-AL00)AppleWebKit/537.36(KHTML,likeGecko)Version/4.0Chrome/57.0.2987.132MQQBrowser/8.9MobileSafari/537.36"}wd={"wd":"China"}url="http://www.baidu.com/s?"response=requests.get(url,params=wd,headers=headers)data=response.textdata2=response.contentprint(response)print(type(response))print(data)print(type(data))print(data2)print(type(data2))print(data2.decode())print(type(data2.decode()))运行结果(可以直接获取整个网页的信息,打印控制台):4.总结本文基于Python基础,主要介绍区别在urllib库和请求库之间。使用urllib中的request模块时,需要对返回体进行解码编码,获取有效信息,拼接请求体后再加载。在进行http请求时,需要在调用之前构造get或post请求,同时也需要先构造headers等头文件。requests是对urllib的进一步封装,使用起来更方便。建议在实际应用中尽量使用requests。希望能给一些对爬虫感兴趣,有具体概念的人。方法只是一个工具。如果你尝试爬取它会更容易上手。网络也会有很多陷阱。做爬虫需要丰富的经验来应对复杂的网络情况。希望大家一起讨论学习,共同进步。
