四川网站建设服务,步骤流程,图片编辑在线使用,免费域名申请的方法request
简介
requests 是一个常用的 HTTP 请求库#xff0c;可以方便地向网站发送 HTTP 请求#xff0c;并获取响应结果。
response.text 和response.content的区别
response.text 类型#xff1a;str解码类型#xff1a; requests模块自动根据HTTP 头部对响应的编码作…request
简介
requests 是一个常用的 HTTP 请求库可以方便地向网站发送 HTTP 请求并获取响应结果。
response.text 和response.content的区别
response.text 类型str解码类型 requests模块自动根据HTTP 头部对响应的编码作出有根据的推测推测的文本编码 response.content 类型bytes解码类型 没有指定
response响应对象的其它常用属性或方法 response requests.get(url)中response是发送请求获取的响应对象response响应对象中除了text、content获取响应内容以外还有其它常用的属性或方法 response.url响应的url有时候响应的url和请求的url并不一致response.status_code 响应状态码response.request.headers 响应对应的请求头response.headers 响应头response.request._cookies 响应对应请求的cookie返回cookieJar类型response.cookies 响应的cookie经过了set-cookie动作返回cookieJar类型response.json()自动将json字符串类型的响应内容转换为python对象dict or list
发送带参数的请求 我们在使用百度搜索的时候经常发现url地址中会有一个 ?那么该问号后边的就是请求参数又叫做查询字符串 在url携带参数
直接对含有参数的url发起请求
import requestsheaders {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}url https://www.baidu.com/s?wdpythonresponse requests.get(url, headersheaders)
通过params携带参数字典
1.构建请求参数字典
2.向接口发送请求的时候带上参数字典参数字典设置给params
import requestsheaders {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}# 这是目标url
# url https://www.baidu.com/s?wdpython# 最后有没有问号结果都一样
url https://www.baidu.com/s?# 请求参数是一个字典 即wdpython
kw {wd: python}# 带上请求参数发起请求获取响应
response requests.get(url, headersheaders, paramskw)print(response.content)cookieJar对象转换为cookies字典的方法 使用requests获取的resposne对象具有cookies属性。该属性值是一个cookieJar类型包含了对方服务器设置在本地的cookie。我们如何将其转换为cookies字典呢 转换方法 cookies_dict requests.utils.dict_from_cookiejar(response.cookies) 其中response.cookies返回的就是cookieJar类型的对象 requests.utils.dict_from_cookiejar函数返回cookies字典 超时参数timeout的使用果。 在爬虫中一个请求很久没有结果就会让整个项目的效率变得非常低这个时候我们就需要对请求进行强制要求让他必须在特定的时间内返回结果否则就报错。 超时参数timeout的使用方法 response requests.get(url, timeout3) timeout3表示发送请求后3秒钟内返回响应否则就抛出异常
import requestsurl https://twitter.com
response requests.get(url, timeout3) # 设置超时时间 了解代理以及proxy代理参数的使用 proxy代理参数通过指定代理ip让代理ip对应的正向代理服务器转发我们发送的请求那么我们首先来了解一下代理ip以及代理服务器 理解使用代理的过程
代理ip是一个ip指向的是一个代理服务器代理服务器能够帮我们向目标服务器转发请求
正向代理和反向代理的区别 前边提到proxy参数指定的代理ip指向的是正向的代理服务器那么相应的就有反向服务器现在来了解一下正向代理服务器和反向代理服务器的区别 从发送请求的一方的角度来区分正向或反向代理为浏览器或客户端发送请求的一方转发请求的叫做正向代理 浏览器知道最终处理请求的服务器的真实ip地址例如VPN 不为浏览器或客户端发送请求的一方转发请求、而是为最终处理请求的服务器转发请求的叫做反向代理 浏览器不知道服务器的真实地址例如nginx
代理ip代理服务器的分类 根据代理ip的匿名程度代理IP可以分为下面三类 透明代理(Transparent Proxy)透明代理虽然可以直接“隐藏”你的IP地址但是还是可以查到你是谁。目标服务器接收到的请求头如下 REMOTE_ADDR Proxy IP
HTTP_VIA Proxy IP
HTTP_X_FORWARDED_FOR Your IP匿名代理(Anonymous Proxy)使用匿名代理别人只能知道你用了代理无法知道你是谁。目标服务器接收到的请求头如下 REMOTE_ADDR proxy IP
HTTP_VIA proxy IP
HTTP_X_FORWARDED_FOR proxy IP高匿代理(Elite proxy或High Anonymity Proxy)高匿代理让别人根本无法发现你是在用代理所以是最好的选择。毫无疑问使用高匿代理效果最好。目标服务器接收到的请求头如下 REMOTE_ADDR Proxy IP
HTTP_VIA not determined
HTTP_X_FORWARDED_FOR not determined根据网站所使用的协议不同需要使用相应协议的代理服务。从代理服务请求使用的协议可以分为 http代理目标url为http协议https代理目标url为https协议socks隧道代理例如socks5代理等 socks 代理只是简单地传递数据包不关心是何种应用协议FTP、HTTP和HTTPS等。socks 代理比http、https代理耗时少。socks 代理可以转发http和https的请求
proxies代理参数的使用 为了让服务器以为不是同一个客户端在请求为了防止频繁向一个域名发送请求被封ip所以我们需要使用代理ip那么我们接下来要学习requests模块是如何使用代理ip的 用法 response requests.get(url, proxiesproxies)proxies的形式字典 例如 proxies { http: http://12.34.56.79:9527, https: https://12.34.56.79:9527,
}注意如果proxies字典中包含有多个键值对发送请求时将按照url地址的协议来选择使用相应的代理ip
使用verify参数忽略CA证书 在使用浏览器上网的时候有时能够看到下面的提示、 原因该网站的CA证书没有经过【受信任的根证书颁发机构】的认证关于CA证书以及受信任的根证书颁发机构点击了解更多课上我们不做展开
运行代码查看代码中向不安全的链接发起请求的效果 运行下面的代码将会抛出包含ssl.CertificateError ...字样的异常 import requests
url https://sam.huat.edu.cn:8443/selfservice/
response requests.get(url)解决方案 为了在代码中能够正常的请求我们使用verifyFalse参数此时requests模块发送请求将不做CA证书的验证verify参数能够忽略CA证书的认证 import requests
url https://sam.huat.edu.cn:8443/selfservice/
response requests.get(url,verifyFalse)requests模块发送post请求 登录注册 在web工程师看来POST 比 GET 更安全url地址中不会暴露用户的账号密码等信息需要传输大文本内容的时候 POST 请求对数据长度没有要求 所以同样的我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求 代码实现 了解requests模块发送post请求的方法百度翻译之后完成代码 import requests
import json# 1.获取请求的 URL
post_urlhttps://fanyi.baidu.com/sug
# 并进行UA伪装
header{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36}# 2.参数处理发起请求的URL有参数才需要处理然后发送请求
wordinput(enter the word:)
data{kw:word}
responserequests.post(post_url,data,headersheader)# 3.获取响应数据
# .text返回的是一个字符串形式的 json 串若确认响应数据是json类型才可以使用.json返回响应头信息当中的Content-Type可以确认
dic_objresponse.json()
print(type(response))
print(dic_obj)
print(type(dic_obj))# # 4.持久化存储
# fpopen(word.json,w,encodingutf-8)
# json.dump(dic_obj,fpfp,ensure_asciiFalse) # 中文不能使用Ascii进行编码