上代码:
#/usr/bin/env python3 #coding=utf8 from fake_useragent import UserAgent import http.client import hashlib import urllib import random,csv import json,time import requests #获取IP列表并检验IP的有效性 def get_ip_list(): f=open('IP.txt','r') ip_list=f.readlines() f.close() return ip_list #从IP列表中获取随机IP def get_random_ip(ip_list): proxy_ip = random.choice(ip_list) proxy_ip=proxy_ip.strip('\n') proxies = {'https': proxy_ip} return proxies #注释:a若查找不到中人名则返回a(row[6]) def getTransResult(q): type = "json" q = q.lower() myurl = 'http://dict-co.iciba.com/api/trans/vip/translate' #q = 'hello baidu trans' #要翻译的内容 myurl = "http://dict-co.iciba.com/api/dictionary.php?w="+q+"&type="+type+"&key=key" #开发者Key ip_list = get_ip_list() proxies = get_random_ip(ip_list) headers = { 'User-Agent':str(UserAgent().random)} try: time.sleep(1) req=requests.get(myurl,headers=headers,proxies=proxies) except: print('程序出错,暂停20秒') time.sleep(20) proxies = get_random_ip(ip_list) headers = { 'User-Agent':str(UserAgent().random)} req=requests.get(myurl,headers=headers,proxies=proxies) req.encoding="utf-8" data = req.text mresult = json.loads(data) getTransResult='' try: getTransResult = mresult['symbols'][0]['parts'][0]['means'][0] except: return getTransResult print('翻译结果为:'+getTransResult) return getTransResult #功能:读取文件并处理 def read_file(filepath): reader=[] with open(filepath,'r') as csvfile: spanreader = csv.reader(csvfile,delimiter='|',quoting=csv.QUOTE_MINIMAL) for row in spanreader: if row: reader.append(row) return reader #功能:将爬取到的内容写入文件 #注意事项:写文件时open中要加上newline='',否则写一行后程序会自动换行 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) if __name__ == "__main__": reader = read_file('S_baiduBaike_youdaoChinese_utf-8.csv') for row in reader: if not row[6]: print('现在爬取的人名是:'+row[0]) TransResult = getTransResult(row[0]) if not TransResult.find('[人名]')==-1: TransResult=TransResult.replace('[人名]','') row[6] = TransResult elif not TransResult.find('[男子名]')==-1: TransResult=TransResult.replace('[男子名]','') row[6] = TransResult elif not TransResult.find('[女子名]')==-1: TransResult=TransResult.replace('[女子名]','') row[6] = TransResult write_file('经有道金山词霸爬取后/S_baiduBaike_youdaoChinese_jscb.csv',row) print('程序运行结束')