Python3--批量爬取数据之调用百度api进行翻译
发布日期:2021-07-01 04:21:06
浏览次数:2
分类:技术文章
本文共 3409 字,大约阅读时间需要 11 分钟。
上代码:
#************************************************************#文件功能:利用百度翻译将英文名翻译成中文#************************************************************import csv,requests,randomfrom fake_useragent import UserAgentimport hashlib import jsonimport timeimport urllib.parseclass Baidufanyi: """docstring for ClassName""" def __init__(self, appid, appSecret, ip_list): self.url = 'https://fanyi-api.baidu.com/api/trans/vip/translate' self.ip_list = ip_list #ip列表 self.appid = appid #应用ID self.appSecret = appSecret #应用密钥 self.langFrom = 'en' #翻译前语言 self.langTo = 'zh' #翻译后语言 ''' 功能:将数据url编码 注释:param queryText:待翻译的文字 return:返回url编码过的数据 ''' def getUrlEncodeData(self,queryText): salt = '2' #我们将随机数固定为2 sign_str = self.appid + queryText + salt + self.appSecret sign_str = sign_str.encode('utf-8') sign = hashlib.md5(sign_str).hexdigest() payload = { 'q': queryText, 'from': self.langFrom, 'to': self.langTo, 'appid': self.appid, 'salt': salt, 'sign': sign } # 注意是get请求,不是请求 data = urllib.parse.urlencode(payload) return data ''''' 解析页面,输出翻译结果 :param html: 翻译返回的页面内容 :return: None ''' def parseHtml(self, html): data = json.loads(html) print ('-------------------------') translationResult = data['trans_result'][0]['dst'] if isinstance(translationResult, list): translationResult = translationResult[0] print (translationResult) return translationResult def get_translateResult(self,queryText): data = self.getUrlEncodeData(queryText) #获取url编码过的数据 target_url = self.url + '?' + data #构造目标url print('target_url为:'+target_url) headers = {'User-Agent':'str(UserAgent().random)'} try: proxies = get_randomIp(self.ip_list) req = requests.get(target_url,proxies=proxies,headers=headers,timeout=10) #构造请求 except: print('运行错误,暂停20秒') proxies = get_randomIp(self.ip_list) req = requests.get(target_url,proxies=proxies,headers=headers) #再次进行构造请求 req.encoding='utf-8' html = req.text translateResult = self.parseHtml(html) #解析,显示翻译结果 return translateResult#获取IP列表并检验IP的有效性 def get_ipList(): f=open('IP.txt','r') ip_list=f.readlines() f.close() return ip_list#从IP列表中获取随机IP def get_randomIp(ip_list): proxy_ip = random.choice(ip_list) proxy_ip=proxy_ip.strip('\n') proxies = {'http': proxy_ip} return proxies#功能:获取需要翻译的文件内容def reader_file(filePath): reader=[] with open(filePath,'r',encoding='utf-8') as csvfile: spanreader = csv.reader(csvfile,delimiter='|',quoting=csv.QUOTE_MINIMAL) for row in spanreader: if row: reader.append(row) return reader#功能:将信息写入文件def write_file(filePath,row): with open(filePath,'a+',encoding='utf-8',newline='') as csvfile: spanreader = csv.writer(csvfile,delimiter='|',quoting=csv.QUOTE_MINIMAL) spanreader.writerow(row)#主程序def main(): print('程序开始运行!') appid = appid #应用ID appSecret = appSecret #应用密钥 filePath = 'baidubaike.csv' #需要翻译的文件 ip_list = get_ipList() fanyi = Baidufanyi(appid,appSecret,ip_list) reader = reader_file(filePath) for row in reader: translateResult = '翻译成功后的结果' #翻译成功后的结果 if not row[6]: print('现在翻译的英文名是:'+row[0]) translateResult = fanyi.get_translateResult(row[0]) print('翻译成功后的结果是:'+translateResult) row[6] = translateResult write_file('baidubaike_notChinese.csv',row) #将爬取过的内容存入test.csv文件 else: write_file('baidubaike_Chinese.csv',row) #将未进行爬取的内容存进test_.csv文件 print('信息爬取成功,程序运行结束')if __name__ == '__main__': main()
转载地址:https://mtyjkh.blog.csdn.net/article/details/79721826 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月28日 18时02分37秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何从 WEB 页面中提取信息 | Binuxの杂货铺
2019-05-04
Crawley Project · Crawley Project
2019-05-04
读《系统虚拟化-原理与实现》-第一章
2019-05-04
读《系统虚拟化-原理与实现》-第二章
2019-05-04
ssh 免密码登录
2019-05-04
读《系统虚拟化-原理与实现》-第三章
2019-05-04
龙芯派启用串口3-5
2019-05-04
龙芯3A4000 VNC配置
2019-05-04
MIPS结构体传参
2019-05-04
解决Centos 7 VNC黑屏
2019-05-04
gdb pwndbg插件安装
2019-05-04
DPDK 18 log日志系统使用
2019-05-04
dpdk 18 ixgbe驱动初始化分析
2019-05-04
centos上使用高版本gcc、g++
2019-05-04
Linux stmac网卡代码分析----probe
2019-05-04
一些比较少用但比较有用的linux命令备忘
2019-05-04
龙芯派2亚克力外壳
2019-05-04