python里更推荐使用的requests库

标准库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转换
原文地址:https://www.cnblogs.com/hongdanni/p/10489292.html