标准库urllib缺少了一些关键的功能,非标准库的第三方库urllib3提供了,比如说连接池管理。
import urllib3 url = 'https://movie.douban.com' ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' # 连接池管理器 with urllib3.PoolManager() as http: response = http.request('GET', url, headers={'User-Agent': ua}) # 在这里可以声明GET方法 print(type(response)) # <class 'urllib3.response.HTTPResponse'> print(response.status, response.reason) # 200 OK print(response.headers) # 响应头信息 print(response.data) # 响应信息
requests库使用了urllib3,API更加友好;默认使用Session对象,保留客户端和服务器多次交互中的会话信息(例如cookie)。
import requests ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' urls = ['https://www.baidu.com/s?wd=magedu', 'https://www.baidu.com/s?wd=magedu'] session = requests.Session() with session: for url in urls: response = session.get(url, headers={'User-Agent': ua}) with response: print(type(response)) # <class 'requests.models.Response'> print(response.url) # 真正访问的url print(response.status_code) # 200 print(response.headers) # 响应的头部 print(response.cookies) # 两次访问同一网站的cookies不同 print(response.request.headers) # 两次访问网站的请求头信息里,第一次没有cookies信息,第二次携带有cookies信息。说明session对象会保存上一次访问该网站的cookies信息。可以躲过通过cookies信息识别进行反爬虫的网站 print(response.text) # HTML的内容;返回的为str类型,不需要做json转换