Python爬虫之Requests模块(二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python爬虫之Requests模块(二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4821字,纯文字阅读大概需要7分钟。
内容图文
一、proxy代理和忽略CA证书
1、了解代理以及proxy代理参数的使用
proxy代理参数通过指定代理ip,让代理ip对应的正向代理服务器转发我们发送的请求,那么我们首先来了解一下代理ip以及代理服务器
(1) 理解使用代理的过程
- 代理ip是一个ip,指向的是一个代理服务器
- 代理服务器能够帮我们向目标服务器转发请求
(2)正向代理和反向代理的区别
前边提到proxy参数指定的代理ip指向的是正向的代理服务器,那么相应的就有反向服务器;现在来了解一下正向代理服务器和反向代理服务器的区别
- 从发送请求的一方的角度,来区分正向或反向代理
- 为浏览器或客户端(发送请求的一方)转发请求的,叫做正向代理【浏览器知道最终处理请求的服务器的真实ip地址,例如VPN】
- 不为浏览器或客户端(发送请求的一方)转发请求、而是为最终处理请求的服务器转发请求的,叫做反向代理【浏览器不知道服务器的真实地址,例如nginx】
(3)代理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的请求
(4)proxies代理参数的使用
为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,所以我们需要使用代理ip;那么我们接下来要学习requests模块是如何使用代理ip的
- 用法:
response = requests.get(url, proxies=proxies)
- proxies的形式:字典
proxies = {
"http": "http://12.34.56.79:9527",
"https": "https://12.34.56.79:9527",
}
- 注意:如果proxies字典中包含有多个键值对,发送请求时将按照url地址的协议来选择使用相应的代理ip
2、使用verify参数忽略CA证书
在使用浏览器上网的时候,有时能够看到下面的提示
- 原因:该网站的CA证书没有经过【受信任的根证书颁发机构】的认证
- 关于CA证书以及受信任的根证书颁发机构点击了解更多,
①、运行代码查看代码中向不安全的链接发起请求的效果
import requests
url = "https://sam.huat.edu.cn:8443/selfservice/"
response = requests.get(url)
- 运行结果:
②、解决方案
为了在代码中能够正常的请求,我们使用
verify=False
参数,此时requests模块发送请求将不做CA证书的验证:verify参数能够忽略CA证书的认证
import requests
url = "https://sam.huat.edu.cn:8443/selfservice/"
response = requests.get(url,verify=False)
二、requests模块发送post请求
思考:哪些地方我们会用到POST请求?
- 登录注册( 在web工程师看来POST 比 GET 更安全,url地址中不会暴露用户的账号密码等信息)
- 需要传输大文本内容的时候( POST 请求对数据长度没有要求)
所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求
(1)requests发送post请求的方法
response = requests.post(url, data)
data
参数接收一个字典- requests模块发送post请求函数的其它参数和发送get请求的参数完全一致
(2)POST请求练习
- 下面面我们通过腾讯翻译的例子看看post请求如何使用:地址:https://fanyi.qq.com/
①、思路分析
- 抓包确定请求的url地址
- 确定请求的参数
- 确定返回数据的位置
- 模拟浏览器获取数据
②、抓包分析的结论
- url地址:
https://fanyi.qq.com/api/translate
- 请求方法:POST
- 请求所需参数:
data = {
'source': 'auto', # 表示被翻译的语言是自动识别
'target': 'auto', # 表示翻译后的语言是自动识别
'sourceText': '字典' # 要翻译的中文字符串
}
- pc端User-Agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
4.2.4 代码实现
import requests
import json
class King(object):
def __init__(self, word):
self.url = 'https://fanyi.qq.com/api/translate'
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.2261 SLBChan/10 "
}
self.data = {
"source": "auto",
"target": "auto",
"sourceText": word
}
def get_data(self):
# 使用post方法发送一个post请求,data为请求体的字典
response = requests.post(self.url, data=self.data, headers=self.headers)
return response.content
def parse_data(self, date):
# 将loads方法将json字符串转换为python字典
dict_data = json.loads(date)
# try:
# dict.map
# except:
print(dict_data['translate']['records'][0]['targetText'])
def run(self):
# 编写爬虫逻辑
# url
# headers
# data字典
# 发送请求获取响应
response = self.get_data()
# print(response)
# 数据解析
self.parse_data(response)
if __name__ == '__main__':
# 循环输入需要翻译的中文、英文单词
while True:
word = input("请输入要翻译的中文或英文单词:")
king = King(word)
king.run()
- 运行结果:
内容总结
以上是互联网集市为您收集整理的Python爬虫之Requests模块(二)全部内容,希望文章能够帮你解决Python爬虫之Requests模块(二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。