Python爬虫之request模块
爬虫——requests模块
Requests继承了urllib.request的所有特性,Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。
相较于urllib.request而言,其使用更加简洁方便。
基本GET请求(headers参数和parmas参数)
1.最基本的GET请求可以直接用get方法
#!/usr/bin/python3 # -*- coding:utf-8 -*- import requests response = requests.get("http://www.baidu.com/") # 也可以这么写 # response = requests.request("get", "http://www.baidu.com/")
2.添加headers和查询参数
如果想添加headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用params参数。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import requests url = "http://www.baidu.com/s?" kw = {"wd":"爬虫"} # User-Agent头 header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} # params接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode() response = requests.get(url = url, params = kw, headers = header) # 打印响应内容,response.text返回的是Unicode格式的数据 print(response.text) # 打印响应内容,response.content返回的是字节流数据 # print(response.content) # 查看完整的url地址 print(response.url) # 查看响应头部字符编码 print(response.encoding) # 查看响应码 print(response.status_code)
使用response.text时,requests会基于HTTP响应的文本编码自动解码响应内容,大多数Unicode字符集都能被无缝地解码。
使用response.content时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
基本POST讨还(data参数)
1.最基本的GET请求可以直接用post方法
#!/usr/bin/python3 # -*- coding:utf-8 -*- import requests response = requests.post("http://www.baidu.com/") # 也可以这么写 # response = requests.request("post", "http://www.baidu.com/")
相关推荐:《Python相关教程》
2.传入data数据
对于POST请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用data这个参数。
#!/usr/bin/python3 # -*- coding:utf-8 -*- import requests url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null" header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} word = input("请输入需要翻译的词条:") from_data = { "i":word, "from":"AUTO", "to":"AUTO", "smartresult":"dict", "doctype":"json", "version":"2.1", "keyfrom":"fanyi.wed" } response = requests.post(url = url, data = from_data, headers = header) # print(response.text) print(response.json())
代理(proxies参数)
如果需要使用代理,你可以通过为任意请求方法提供proxies参数来配置单个请求:
#!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ = 'mayi' import requests # 根据协议类型,选择不同的代理 proxies = { "http": "http://12.34.56.78:90", "https": "http://21.43.65.87:90" } response = requests.get("http://www.baidu.com/", proxies = proxies) print(response.text)
Cookies和Sission
1.Cookies
如果一个响应中包含了cookie,那么我们可以利用cookies参数拿到:
#!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ = 'mayi' import requests response = requests.get("http://www.baidu.com/") cookiejar = response.cookies cookiedict = requests.utils.dict_from_cookiejar(cookiejar) print(cookiejar) print(cookiedict)
2.Sission
在requests里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个Session实例发出的所有请求之间保持cookie。
实现人人网登录
#!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ = 'mayi' import requests # 创建session对象,用于保存Cookie值 session = requests.session() # User-Agent头 header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} # 需要登录的账户和密码 email = input("请输入您的账户:") password = input("请输入您的密码:") data = {"email": email, "password": password} # 发送附带账户密码的请求,并获取登录后的Cookie值,保存在session中 session.post("http://www.renren.com/PLogin.do", data = data) # session中包含了登录后的Cookie值,可以直接访问那些需登录后才能访问的页面 response = session.get("http://www.renren.com/413928886/profile") # 打印响应内容 print(response.text)
来源:PY学习网:原文地址:https://www.py.cn/article.html