爬虫之百度翻译(附__init__函数作用、GET请求头和POST请求体的区别、python 函数学习之sys.argv[1])

本文通过百度翻译实例,探讨了`__init__`初始化函数的作用,GET和POST请求的区别,以及Python中使用`sys.argv[1]`进行函数参数传递。文章详细解释了`__init__`如何接收形参并设置类属性,分析了在HTTP请求中GET与POST的不同应用场景,并介绍了函数模块化的重要性,以提高代码可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度翻译实例:
import requests
import json
import sys

class BaiduFanyi:
	def __init__(self,trans_str)#将固定不变的数据放在初始化函数,可以在其他函数中传递。
	#在__init__(self,trans_str)中的trans_str是在全局实例化类名后面可以添加的实参
		self.trans_str = trans_str
		self.lang_detect_url = "https://fanyi.baidu.com/langdetect"  # 复制语言检测的url地址
		self.headers={"User-Agent"="Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
}
	def parse_url(self,url,data): #发送和接收post请求,传入data形参是因为post请求中,不仅需要带headers请求头,还需要带data请求体
		response = requests.post(url,data=data,headers=self.headers)
		return json.loads(response.content.decode()) 
		# `response.content.decode()`对返回的bytes数据进行解码,默认是utf-8
		#`json.loads()`是转换成json字典数据,而转化成js字典是因为最终的目的是取字典中lang键的值。
		# 然后在<run>方法里拿到lang的值
	def get_ret(self,dict_response):#提取翻译的结果
		
		# 取response中的dst的值 >>> 
		# trans: [{dst: "Bye", prefixWrap: 0, result: [[0, "Bye", ["0|6"], [], ["0|6"], ["0|3"]]], src: "再见"}]
		ret = dict_response["trans"][0]["dst"]
		print("result is:",ret)
	def run(self): #实现主要逻辑
		#1.获取语言类型
			#1.1 准备post的url地址:post_data
		lang_detect_data = {"query":self.trans_str}
			#1.2 第一次发送post请求,获取响应,获取当前语言类型
			#1.3 提取语言类型
		lang = self.parse_url(self.lang_detect_url,lang_detect_data)['lan']
		#调用parse_url函数,返回的是一个字典{},在字典后加[key],可以取到对应的values	
		#2.准备post的数据,根据输入语言,判断当前应发送的data字典
		   #另外,Form Data不一定是固定不变的,还会有其他键值对,需要一同输入
		trans_data = {"query":self.trans_str,"from":"zh","to":"en"} if lang=="zh" else {"query":self.trans_str,"from":"en","to":"zh"} 
		# self.trans_str 表示输入要翻译的内容,会在全局实例化类名后面的实参内添加。
		#3.第二次发送post请求(这是真的post请求),获取响应,获取翻译结果,用parse_url方法返回的是字典
		dict_response = self.parse_url(self.trans_url,trans_data) #
		#4.提取数据,提取翻译的结果
		self.get_ret(dict_response)
if __name__ == '__main__':
	trans_str = sys.argv[1] #主要是可以在pyhton shell中 快速使用。
	baidu_fanyi = BaiduFanyi(trans_str) #实例化类名,
	baidu_fanyi.run()

知识链接:__init__初始化的作用 >>>>
知识链接:GET请求头和POST请求体的区别 >>>>
知识链接:python 函数学习之sys.argv[1] >>>>

知识点总结:
  • 1.__init__函数中的属性变量作用
    • a.__init__ (self,形参1,形参2,...): 如果传入形参,则在实例化类名后的括号内就不能为空,需要传入对应的实参数据;
    • b.__init__下的命名的变量,都是类中固定不变的变量,可以在类下的其他函数中传递,命名方法是:self.变量1 = 变量1 ;传递的变量是 self.变量1
  • 2.除了 初始化方法"init"和 实现主要逻辑的"run"方法外,为什么还要定义其他函数,如parse_url、get_ret等方法?
    • 因为在run方法中定义这些函数可能会造成一个方法内的代码冗长,不利于识别代码的作用
    • 当需要不同方法来实现不同操作时,定义其他函数,只需要在主逻辑函数中顺次添加即可。
  • 3.if…else…的表达形式:
    • 一般表达:

      if a>3:
      	b = 0
      else:
      	b = 1
      
    • 简洁表达(推荐):

      b = 0 if a>3 else b = 1
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值