您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)python爬蟲如何爬取英文文檔存為PDF,在讀取PDF自動(dòng)翻譯文檔的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
這幾天在爬了Python的官方文檔,但是它里面全是英文,只有數(shù)字,沒有漢字,原諒我這個(gè)英語渣渣搞不懂,只能靠翻譯了,如果是復(fù)制到百度翻譯的話太慢,耗時(shí)間。所以就直接用爬蟲來搞了,自動(dòng)化翻譯文檔
這是百度翻譯的頁面
剛開始想用urllib去做,但是給我報(bào)了一個(gè)我的瀏覽器版本太低了,估計(jì)就是得加headers和UA。太麻煩了,就想到了selenium,直接用selenium妥妥的,下面就是詳細(xì)步驟了。
先從爬Python官網(wǎng)開始吧
就只抓了這一頁的數(shù)據(jù)。這個(gè)簡單,直接可以使用requests或者urllib抓取,然后轉(zhuǎn)換成pdf。我的是在框架里面,有點(diǎn)麻煩,如果你覺得麻煩可以直接請求。
安裝Python庫:pip3 install pdfkit
安裝插件wkhtmltopdf,
https://wkhtmltopdf.org/downloads.html官網(wǎng)地址
import scrapy
import pdfkit
class so_python3_spider(scrapy.Spider):
name = 'doc'
def start_requests(self):
url = 'https://docs.python.org/3.8/whatsnew/3.8.html'
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
body = response.selector.xpath('//div[@class="section"]').extract()
title = response.selector.xpath('//div[@class="section"]/h2/text()').extract()
html_template = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
{content}
</body>
</html>
"""
for i in range(len(body)):
html = html_template.format(content=body[i])
with open(title[i]+'.html', 'a', encoding='utf8') as f:
f.write(html)
options = {
'page-size': 'Letter',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
]
}
path_wk = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe' # 安裝位置
config = pdfkit.configuration(wkhtmltopdf=path_wk)
pdfkit.from_file(title[i]+'.html', title[i]+'.pdf', options=options, configuration=config)
我是直接將一個(gè)div里面的這個(gè)內(nèi)容全部拿下來,然后拼接一個(gè)新的html,將這個(gè)新的HTML轉(zhuǎn)換成PDF。
第二階段就是打開這個(gè)pdf,讀取該文檔,將其發(fā)送到百度翻譯的框框,獲取翻譯的結(jié)果,重新保存
-----------讀取文檔--------
def read_pdf_to_text(self):
fp = open("What’s New In Python 3.8.pdf", "rb") # 根據(jù)二進(jìn)制的方式讀取
# 如果是url
# fp=request.urlopen(url)#網(wǎng)址
# 創(chuàng)建與文檔關(guān)聯(lián)的解釋器
parser = PDFParser(fp)
# 創(chuàng)建一個(gè)pdf文檔對象
doc = PDFDocument()
# 連接解釋器和文檔對象
parser.set_document(doc)
doc.set_parser(parser)
# 對文檔進(jìn)行初始化
doc.initialize("") # 文件沒有密碼就是空字符串
# 創(chuàng)建一個(gè)pdf資源管理器
resouse = PDFResourceManager()
# 創(chuàng)建一個(gè)參數(shù)分析器
lap = LAParams()
# 創(chuàng)建一個(gè)聚合器
device = PDFPageAggregator(resouse, laparams=lap)
# 創(chuàng)建一個(gè)頁面解釋器
interpreter = PDFPageInterpreter(resouse, device)
# 開始讀取內(nèi)容
for page in doc.get_pages():
# 調(diào)用頁面解釋器來解釋
interpreter.process_page(page)
# 使用聚合器來獲得內(nèi)容
layout = device.get_result()
for out in layout:
if hasattr(out, "get_text"):
content = out.get_text()
將文檔讀取,發(fā)送到百度翻譯https://fanyi.baidu.com/?aldtype=16047#en/zh
找到輸入框和輸出框的位置
翻譯模塊(復(fù)制到微信里,格式有點(diǎn)問題,大家自己修正)
def baidu_fanyi(self, content):
time.sleep(5)
# 找到輸入框的位置,并將內(nèi)容發(fā)送到該位置
self.browser.find_element_by_id('baidu_translate_input').send_keys(content)
time.sleep(5)
# 獲取輸出框的內(nèi)容
con = self.browser.find_element_by_class_name('output-bd')
# 寫入文件
with open('python3.8.txt', 'a', encoding='utf8') as f:
# 由于content內(nèi)容帶有回車符,所以不用\n
f.write(content + con.text + '\n')
# 將輸入框清空,等待下一次輸入
self.browser.find_element_by_id('baidu_translate_input').clear()
time.sleep(5)
這是翻譯后輸出的內(nèi)容
當(dāng)然還有可以優(yōu)化加強(qiáng)的部分,比如使用pyqt做個(gè)界面,打包成exe就可以當(dāng)程序用了。有什么建議留言。
感謝各位的閱讀!關(guān)于“python爬蟲如何爬取英文文檔存為PDF,在讀取PDF自動(dòng)翻譯文檔”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。