
來源:早起Python
作者:陳熹
大家好,我是早起。
在之前的文章 批量翻譯文檔 中,我們介紹了如何調用百度翻譯API完成實際的文檔翻譯需求。如果是科研、深度學習等需要經常閱讀大量論文的工作,批量翻譯就能大大提高效率。
本文將進一步使用 Python 實現另一個在科研學術領域的辦公自動化應用?!?/span>結合爬蟲批量翻譯文獻題目和摘要,并存儲搜索和翻譯結果至 Excel中」
完成效果如下,指定的外文文獻標題、摘要都被批量翻譯后存儲在Excel中,我們可以大致瀏覽后有選擇性的挑選文章閱讀!
本文以ACM協會的文獻為例,搜索的關鍵詞是 “對抗生成網絡+眼底” ,即 “GAN+fundus”
本文需求可以看做三塊內容:爬蟲+翻譯+存儲 在使用百度的通用翻譯 API 之前需要完成以下工作:
“使用百度賬號登錄百度翻譯開放平臺(
http://api.fanyi.baidu.com)注冊成為開發者,獲得APPID;進行開發者認證(如僅需標準版可跳過);開通通用翻譯API服務:開通鏈接參考技術文檔和Demo編寫代碼”
完成后在個人頁面在即可看到 ID 和密鑰,這個很重要!
關于如何使用Python爬取翻譯結果的細節本文就不再贅述!我已經將通用翻譯 API 的 demo代碼寫好,已經對輸出做簡單修改,拿走就能用!
import requests import random import json from hashlib import md5 # Set your own appid/appkey. appid = 'xxx' appkey = 'xxx' # For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21` from_lang = 'en' to_lang = 'zh' endpoint = 'http://api.fanyi.baidu.com' path = '/api/trans/vip/translate' url = endpoint + path
query = 'Hello World! This is 1st paragraph.nThis is 2nd paragraph.' # Generate salt and sign def make_md5(s, encoding='utf-8'): return md5(s.encode(encoding)).hexdigest()
salt = random.randint(32768, 65536)
sign = make_md5(appid + query + str(salt) + appkey) # Build request headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign} # Send request r = requests.post(url, params=payload, headers=headers)
result = r.json() # Show response for res in result['trans_result']:
print(res['dst'])
在本需求中可以考慮將上面的API重新包裝成函數,將爬取的題目和摘要看做兩個文本輸入函數后,返回翻譯的結果:
import requests import random import json from hashlib import md5 def make_md5(s, encoding='utf-8'): return md5(s.encode(encoding)).hexdigest() def Baidu_translate(query): # Set your own appid/appkey. appid = 'xxx' appkey = 'xxx' from_lang = 'en' to_lang = 'zh' endpoint = 'http://api.fanyi.baidu.com' path = '/api/trans/vip/translate' url = endpoint + path
try:
salt = random.randint(32768, 65536)
sign = make_md5(appid + query + str(salt) + appkey)
# Build request headers_new = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
# Send request r = requests.post(url, params=payload, headers=headers_new)
result = r.json()['trans_result'][0]['dst']
return result
except:
return '翻譯出錯'
函數中用 try 捕獲錯誤避免中途因為提交的文本為空,而導致的報錯終止程序
存儲部分,通過 openpyxl 或者 xlwings 存儲到 Excel 中就可以
爬蟲部分,兩個網站的邏輯非常類似,具體見下文
首先爬取ACM的摘要,在首頁搜索框中輸入:GAN+fundus 跳轉后可以發現,URL包含了關鍵詞:
那么后面的搜索就可以直接用URL拼接:
keyword = 'GAN+fundus' url_init = r'https://dl.acm.org/action/doSearch?AllField=' url =url_init + keyword
搜索結果非常多,本文爬取第一頁文章的摘要為例,后續讀者當關鍵詞鎖定的文獻比較少或者想獲取全部文獻,可以自行尋找URL翻頁邏輯
同時我們發現,摘要顯示不全,確認源代碼和ajax動態加載不包含完整摘要,因此可以考慮進入各文獻的詳情頁獲取摘要:
回到搜索結果頁,對詳情頁分析可以發現每個文獻可獲取的href跟 dl.acm.org 拼接后即為詳情頁URL:
接下來就可以利用Xpath獲取搜索頁第一頁全部文獻的 href 并拼接成新URL:
import requests from lxml import html
keyword = 'GAN+fundus' url_init = r'https://dl.acm.org/action/doSearch?AllField=' url =url_init + keyword
html_data = requests.get(url).text
selector = html.fromstring(html_data)
articles = selector.xpath('//*[@id="pb-page-content"]/div/main/div[1]/div/div[2]/div/ul/li') for article in articles:
url_new = 'https://dl.acm.org' + article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]
print(url_new)
獲得新的URL之后,重新用Xpath解析新的網頁獲取題目和摘要:
for article in articles:
url_new = 'https://dl.acm.org' + article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]
html_data_new = requests.get(url_new).text
selector_new = html.fromstring(html_data_new)
title = selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]
abstract = selector_new.xpath('//div[@class="abstractSection abstractInFull"]/p/text()')[0]
print('Title: ' + title)
print('Abstract: ' + abstract)
print('-' * 20)
題目和摘要可以成功輸出,但現在還是英文形式。只需要將文本提交給上文中包裝好的翻譯函數,輸出返回值就是中文翻譯形式了。注意免費的API每秒只允許調用一次,可以考慮將題目和摘要組合成一個文本同時提交,或者中間休眠一秒:
for article in articles:
url_new = 'https://dl.acm.org' + article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]
html_data_new = requests.get(url_new).text
selector_new = html.fromstring(html_data_new)
title = selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]
abstract = selector_new.xpath('//div[@class="abstractSection abstractInFull"]/p/text()')[0]
title = 'Title: ' + title
translated_title = Baidu_translate(title)
print(title)
print(translated_title)
time.sleep(1)
abstract = 'Abstract: ' + abstract translated_abstract = Baidu_translate(abstract)
print(abstract)
print(translated_abstract)
time.sleep(1)
print('-' * 20)
題目和摘要成功翻譯!接下來可以自定義對接意向的持久化存儲了,以openpyxl為例,首先在代碼的開頭用 openpyxl 創建 Excel 文件并寫入表頭:
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
header = ['序號', '題目', '題目(譯)', '摘要', '摘要(譯)']
sheet.append(header)
path = 'xxx' # 希望保存文件的路徑
用變量 num 標記文章的順序,并在每篇文章解析和翻譯完后利用 sheet.append(list) 寫入 Excel,循環結束后保存文件即完成全部存儲:
num = 0 keyword = 'GAN+fundus' url_init = r'https://dl.acm.org/action/doSearch?AllField=' url =url_init + keyword
html_data = requests.get(url).text
selector = html.fromstring(html_data)
articles = selector.xpath('//*[@id="pb-page-content"]/div/main/div[1]/div/div[2]/div/ul/li') for article in articles:
num += 1 url_new = 'https://dl.acm.org' + article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]
html_data_new = requests.get(url_new).text
selector_new = html.fromstring(html_data_new)
title = selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]
abstract = selector_new.xpath('//div[@class="abstractSection abstractInFull"]/p/text()')[0]
title = 'Title: ' + title
translated_title = Baidu_translate(title)
print(title)
print(translated_title)
time.sleep(1)
abstract = 'Abstract: ' + abstract
translated_abstract = Baidu_translate(abstract)
print(abstract)
print(translated_abstract)
time.sleep(1)
print('-' * 20)
sheet.append([num, title, translated_title, abstract, translated_abstract])
wb.save(path + r'文獻輸出.xlsx')
最終實現效果如下,可以看到指定的文章標題、摘要都被翻譯提取出來,我們可以大致瀏覽后有選擇的查閱文章。
另外還有一個重要的計算機協會,IEEE(https://ieeexplore.ieee.org/Xplore/home.jsp),網頁信息爬取邏輯和ACM非常類似,不再贅述
綜合各種辦公自動化技術,我們可以實現各式各樣的辦公或科研需求,扎實的技術是最重要的前提。
例如本文的需求,其實我們還可以通過 openpyxl 或者 xlwings 存儲到 Excel 中,實際上還可以 python-docx 寫入 Word 中,甚至從文獻中獲取圖片,借助 python-pptx 寫入 PPT 中。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23