转载自:https://blog.csdn.net/qq_38783948/article/details/88239109
1.urllib.request
我们都知道,urlopen()
方法能发起最基本对的请求发起,但仅仅这些在我们的实际应用中一般都是不够的,可能我们需要加入headers之类的参数,那需要用功能更为强大的Request类来构建了
在不需要任何其他参数配置的时候,可直接通过urlopen()
方法来发起一个简单的web请求
1.1 发起一个简单的请求
import urllib.request url='https://www.baidu.com' webPage=urllib.request.urlopen(url) print(webPage) print('--------------------------------------') data=webPage.read() print(data) print('--------------------------------------') print(data.decode('utf-8'))
urlopen()
方法返回的是一个http.client.HTTPResponse
对象,需要通过read()
方法做进一步的处理。一般使用read()
后,我们需要用decode()
进行解码,通常为utf-8
,经过这些步骤后,最终才获取到我们想要的网页
1.2 添加Headers信息
import urllib.request url='https://www.douban.com' 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', } response=urllib.request.Request(url=url,headers=headers) webPage=urllib.request.urlopen(response) print(webPage.read().decode('utf-8'))
使用Request类返回的又是一个urllib.request.Request
对象了。
通常我们爬取网页,在构造http请求的时候,都需要加上一些额外信息,什么User_Agent,cookie等之类的信息,或者添加代理服务器。往往这些都是一些必要的反爬机制
2.requests
通常而言,在我们使用python爬虫时,更建议用requests
库,因为requests比urllib更为便捷,requests
可以直接构造get,post
请求并发起,而urllib.request
只能先构造get,post
请求,再发起。
import requests url='https://www.douban.com' 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', } get_response = requests.get(url,headers=headers,params=None) post_response=requests.post(url,headers=headers,data=None,json=None) print(post_response) print(get_response.text) print(get_response.content) print(get_response.json)
get_response.text
得到的是str
数据类型。get_response.content
得到的是Bytes
类型,需要进行解码。作用和get_response.text
类似。get_response.json
得到的是json
数据。
总而言之,requests是对urllib的进一步封装,因此在使用上显得更加的便捷,建议小伙伴们在实际应用当中尽量使用requests
。