linux怎么查看本机内存大小
255
2022-11-09
Requets模块的使用(爬取简单网页和图片)
Requests 使用入门:
requests的底层实现就是urllib.requests在python2 和python3中通用,方法完全一样.requests简单易用.Requests能够自动帮助我们解压(gzip压缩的等)网页内容.Requests 继承了urllib的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码.--------------------------------
安装方式:
利用 pip 安装 或者利用 easy_install 都可以完成安装:pip install requestseasy_install requests
基本GET请求:
1. 最基本的GET请求可以直接用get方法 response = requests.get("也可以这么写# response = requests.request("get", "添加 headers 和 查询参数 如果想添加 headers,可以传入headers参数来增加请求头中的headers信息.如果要将参数放在url中传递,可以利用 params 参数.import requestskw = {'wd':'长城'}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()response = requests.get("params = kw, headers = headers)# 查看响应内容,response.text 返回的是Unicode格式的数据print (response.text)# 查看响应内容,response.content返回的字节流数据print (respones.content)# 查看完整url地址print (response.url)# 查看响应头部字符编码print (response.encoding)# 查看响应码print (response.status_code)-----------------------------使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码.使用response.content 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件.
爬去网页:
产生问题的原因分析:requests默认自带的Accept-Encoding导致或者新浪默认发送的就是压缩之后的网页但是为什么content.read()没有问题,因为requests,自带解压压缩网页的功能当收到一个响应时,Requests 会猜测响应的编码方式,用于在你调用response.text 方法时对响应进行解码.Requests 首先在 HTTP 头部检测是否存在指定的编码方式,如果不存在,则会使用 chardet.detect来尝试猜测编码方式(存在误差)更推荐使用response.content.deocde()
爬取图片并保存:
-----------------------------------------------import requestsimg_url = " di=ab4f277eaeb45d0f953befeceb0a9c84&imgtype=0&src= 25%2F19%2F01300000167299127987196914835.jpg"headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"}resp = requests.get(img_url,headers=headers)print(resp.status_code)with open("img.jpg","wb") as f: f.wirte(resp.content)-----------------------------------------------
基本POST请求(data参数):
1. 最基本post方法 response = requests.post("data = data)2. 传入data数据 对于 POST 请求来说,我们一般需要为它增加一些参数.那么最基本的传参方法可以利用 data 这个参数. -------------------------------------- import requests import json formdata = { "i": "你好", "from": "AUTO", 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': '16010104571724', 'sign': 'da4e788cfacbd8cd8b96588042d53324', 'lts': '1601010457172', 'bv': 'b7d083ea2270df2b0abf47e3a48f3bb1', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } url = " headers={ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36", "Referer": ""OUTFOX_SEARCH_USER_ID=1730229498@10.169.0.84; JSESSIONID=aaauz7PIZoLJR-keHPdtx; OUTFOX_SEARCH_USER_ID_NCOO=1187409981.6170602; ___rl__test__cookies=1601010457168"} response = requests.post(url, data = formdata, headers = headers) resp_data = json.loads(response.text) print(resp_data["translateResult"][0][0]["tgt"]) # 如果是json文件可以直接显示 print (response.status_code) # 如果是json文件可以直接显示 print (response.json()) ------------------------------------
代理(proxies参数):
如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:-----------------------import requests# 根据协议类型,选择不同的代理proxies = { "" ""= requests.get("proxies = proxies)print(response.text)------------------------也可以通过本地环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理:export HTTP_PROXY="HTTPS_PROXY="和 Web客户端验证(auth 参数):
私密代理import requests# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:proxy = { ""mr_mao_hacker:sffqry9r@61.158.163.130:16816" }response = requests.get("proxies = proxy)print(response.text)
web客户端验证:
如果是Web客户端验证,需要添加 auth = (账户名, 密码)import requestsauth=('test', '123456')response = requests.get('auth = auth)print (response.text)
Cookies 和 Sission:
Cookies: 如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:
import requestsresponse = requests.get("返回CookieJar对象:cookiejar = response.cookies# 将CookieJar转为字典:cookiedict = requests.utils.dict_from_cookiejar(cookiejar)print(cookiejar)print(cookiedict)
session:
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开.会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie .实现人人网登录----------------------import requests# 1\. 创建session对象,可以保存Cookie值ssion = requests.session()# 2\. 处理 headersheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}# 3\. 需要登录的用户名和密码data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"} # 4\. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里ssion.post("data = data)# 5\. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面response = ssion.get("6\. 打印响应内容print (response.text)----------------------
处理HTTPS请求 SSL证书验证:
Requests也可以为HTTPS请求验证SSL证书:要想检查某个主机的SSL证书,你可以使用 verify 参数(也可以不写)import requestsresponse = requests.get("verify=True)# 也可以省略不写# response = requests.get("(r.text)来测试一下:import requestsresponse = requests.get("(response.text)果然:SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)如果我们想跳过 12306 的证书验证,把 verify 设置为 False 就可以正常请求了.r = requests.get("verify = False)
Requests小技巧:
1、reqeusts.util.dict_from_cookiejar 把cookie对象转化为字典1.1. requests.get(url,cookies={})2、请求 SSL证书验证 response = requests.get("", verify=False)3、设置超时 response = requests.get(url,1)4、配合状态码判断是否请求成功 assert response.status_code == 200
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~