admin管理员组文章数量:1643657
使用post请求:
我们一般使用requests中的post请求会基于以下情况:
1.模仿浏览器进行登录注册
2.需要传输大文本数据时(post请求不限制数据长度)使用requests模块实现爬虫:requests.post(url=post_url,data=data)
寻找url与js数据:
一、 实现英文–>中文的翻译:
# coding=utf-8
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}
data = {
"from":"en",
"to":"zh",
"query":"hola",
"transtype":"translang",
"simple_means_flag":"3",
"sign":"372549.85108",
"token":"e89a8f037aac1b51a86cbc82356949d"
}
post_url = "http://fanyi.baidu/v2transapi"
r = requests.post(post_url,data=data,headers=headers)
print(r.content.decode())
此时,执行代码会返回:
{“error”:997,”from”:”en”,……}
分析检查界面中的headers会发现,sign这个值会随着输入内容不同改变(也就是js动态生成的.),因此我们考虑将网页版改为手机版浏览。
手机版代码与电脑版代码区别仅为url的不同,下面是手机版的爬虫代码。
# coding=utf-8
import requests
import json
import sys
query_string = sys.argv[1]
headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
post_data = {
"query":query_string,
"from":"zh",
"to":"en",
}
post_url = "http://fanyi.baidu/basetrans"
r = requests.post(post_url,data=post_data,headers=headers)
# print(r.content.decode())
dict_ret = json.loads(r.content.decode())
ret = dict_ret["trans"][0]["dst"]
print("result is :",ret)
二、实现自动检测语言的功能:
# coding=utf-8
import requests
import json
import sys
class BaiduFanyi:
def __init__(self,trans_str):
self.trans_str = trans_str
self.lang_detect_url = "http://fanyi.baidu/langdetect"
self.trans_url = "http://fanyi.baidu/basetrans"
self.headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
def parse_url(self,url,data): #发送post请求,获取响应
response = requests.post(url,data=data,headers=self.headers)
return json.loads(response.content.decode())
def get_ret(self,dict_response):#提取翻译的结果
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请求,获取响应
lang = self.parse_url(self.lang_detect_url,lang_detect_data)["lan"]
#1.3 提取语言类型
#2.准备post的数据
trans_data = {"query":self.trans_str,"from":"zh","to":"en"} if lang== "zh" else \
{"query":self.trans_str,"from":"en","to":"zh"}
#3.发送请求,获取响应
dict_response = self.parse_url(self.trans_url,trans_data)
#4.提取翻译的结果
self.get_ret(dict_response)
if __name__ == '__main__':
trans_str= sys.argv[1]
baidu_fanyi = BaiduFanyi(trans_str)
baidu_fanyi.run()
版权声明:本文标题:通过爬虫实现百度在线翻译 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1725599628a1032305.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论