# Python爬虫求职信息的整合和百度翻译API测试

前言:
最近在找一些欧洲院校的科研职位,发现德国许多工程类的职位信息只提供了德语版,并且无法通过网页翻译工具直接进行翻译,因此在匹配详细职位信息的时候十分费力且费时,本博客基于此测试了一种Web信息聚合整理小工具。

在这里插入图片描述


Python爬虫求职信息的整合和百度翻译API测试

1. 测试项目简介

由于浏览器自带的网页翻译功能并不支持对这些网页的翻译,本项目是希望能够设计一个自动化程序,分析德国某大学研究系列岗位的招聘信息并整理成列表,并将德语字符串转换为中文。
项目基本流程如下:

  • 格式化爬虫信息
    原始的数据信息如下:
Stellvertretende Dezernatsleitung / Wissenschaftliche/r Mitarbeiter/in (w/m/d) (in German only) [V000004876]#Dezernat Publikationen#[published 17/03/2023]Universitätsbibliothek [021000]15/04/2023###Wissenschaftliche/r Mitarbeiter/in / Oberverwaltungsrat/Oberverwaltungsrätin (w/m/d) (in German only) [V000004877]#Dezernat Benutzung#[published 17/03/2023]Universitätsbibliothek [021000]15/04/2023###...

采用python的字符串处理工具,提取关键信息并构建列表保存。

#######################################################################################################
with open(r"...\Web_spider\data_source\data2.txt", 'r', encoding='utf-8') as f:
    text = f.read()

list_text = text.split('###')
  • 读取特定字段信息
ddl_list = []
str_t_list = []
langua_req_list = []
pos_title_list = []
descrip_list = []
ch_langua_req_list = []
ch_pos_title_list = []
ch_descrip_list = []

# 循环遍历每个信息节点
for i in range(len(list_text)):
    deadline_time = list_text[i].split(' ')[-1]
    str_time = list_text[i].split('[published')[1].split(']')[0]

    try:
        language_req = (list_text[i].split('w/m/d'))[1].split(')')[1]
    except:
        language_req = (list_text[i].split('f/m/d'))[1].split(')')[1]
    # 翻译语言要求信息
    ch_langua_req = baiduTranslate(language_req)
    try:
        pos_title = list_text[i].split('(w/m/d')[0]
    except:
        pos_title = list_text[i].split('(f/m/d')[0]
    ch_pos_title = baiduTranslate(pos_title)

    a = list_text[i].split('[published')[0]
    descrip = a.split(']')[1]
    ch_descrip = baiduTranslate(descrip)

    # append
    ddl_list.append(deadline_time)
    str_t_list.append(str_time)
    ch_langua_req_list.append(ch_langua_req)
    ch_pos_title_list.append(ch_pos_title)
    ch_descrip_list.append(ch_descrip)
    langua_req_list.append(language_req)
    pos_title_list.append(pos_title)
    descrip_list.append(descrip)
  • 利用百度翻译API将德语字符串转换为中文
# 百度翻译api调用
def baiduTranslate(translate_text):
    '''
    :param translate_text: 待翻译的句子,len(q)<2000

    :return: 返回翻译结果。
    For example:
    q=我今天好开心啊!
    result = {'from': 'zh', 'to': 'en', 'trans_result': [{'src': '我今天好开心啊!', 'dst': "I'm so happy today!"}]}
    '''

    appid = 'xxx'  # 填写你的appid
    secretKey = 'xxx'  # 填写你的密钥
    httpClient = None
    myurl = '/api/trans/vip/translate'  # 通用翻译API HTTP地址
    fromLang = 'auto'  # 原文语种

    # if flag:
    #     toLang = 'en'  # 译文语种
    # else:
    #     toLang = 'zh'  # 译文语种

    toLang = 'zh'
    salt = random.randint(3276, 65536)

    sign = appid + translate_text + str(salt) + secretKey
    sign = hashlib.md5(sign.encode()).hexdigest()
    myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(translate_text) + '&from=' + fromLang + \
            '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign

    # 建立会话,返回结果
    try:
        httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
        httpClient.request('GET', myurl)
        # response是HTTPResponse对象
        response = httpClient.getresponse()
        result_all = response.read().decode("utf-8")
        result = json.loads(result_all)

        # return result
        return result['trans_result'][0]['dst']

    except Exception as e:
        print(e)
    finally:
        if httpClient:
            httpClient.close()
  • 整合为列表
ch_zip_result = zip(ch_pos_title_list, ddl_list, str_t_list, ch_langua_req_list, ch_descrip_list)
ch_zip_result_list = list(ch_zip_result)

zip_result = zip(pos_title_list, ddl_list, str_t_list, langua_req_list, descrip_list)
zip_result_list = list(zip_result)

ch_df3 = pd.DataFrame(ch_zip_result_list, columns=["位置名称", "ddl", "str_time", "语言要求", "职位说明"])

2. Dataframe数据整合、翻译结果

API调用BUG:虽然相比于网页版的完全无法翻译相对好了不少,但还是存在部分可以翻译的字段确显示为信息缺失了

在这里插入图片描述

参考文献资料

【1】可参考的百度API调用教程
【2】百度API调用官网

本博客完整代码内容请前往此处

猜你喜欢

转载自blog.csdn.net/u013537270/article/details/129845237