欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫 爬取翻译类网站

程序员文章站 2022-05-04 12:07:24
...

很多翻译网站都是一下类似的布局,如百度翻译:

Python爬虫 爬取翻译类网站

当输入要翻译的内容点击翻译后,网站的URL实际上是不会变的,因为大多数翻译网站在进行这个操作的时候用到的是POST请求类型。

我以我爬过的一个日文翻译网站举例:Python爬虫 爬取翻译类网站


用Chrome查看接收的文件,这里其实就是我们每次查询发送的POST请求内容。其中timestamp,unqid都是随机的(但是在我爬去的过程中网站好像不会去认证这些),只要在代码中把每次请求加上这些内容就行了。

下面上代码:

import requests
import lxml
from bs4 import BeautifulSoup

url = 'http://nihongo.j-talk.com/'

def get_result(content):
    data = {}
    data['timestamp'] = '1499416657'
    data['uniqid'] = '48f377db0a94b119fe3870942785c1b8e0bb654b'
    data['kanji'] = content
    data['Submit'] = 'Translate Now'
    data['kanji_parts'] = 'unchanged'
    data['converter'] = 'spacedrollover'
    data['kana_output'] = 'katakana'

    response = requests.post(url,data = data) 

    soup = BeautifulSoup(response.text,'lxml')
    
    ###分析html获得结果
    big = ''
    if soup.findAll('trg',{'class':'trigger'}):
        romas = soup.findAll('trg',{'class':'trigger'})
        for roma in romas:
            roma = roma.get_text()
            big += roma
        return big
    else:
        try:
            romas = soup.findAll('div',{'class':'katakana'})
            for roma in romas:
                roma = roma.get_text()
                big += roma
            return big
        except:
            return ''

inputfilepath = input('输入读取的文件路径')
inputfile = open(inputfilepath,'r')
outputfile = open('output'+inputfilepath,'w')
lines = inputfile.readlines()
for line in lines:
    line = line.replace('\n','')
    result = get_katakana(line)
    result1 = "%s    %s\r\n" %(line,result)
    print(result1),
    outputfile.write(result1)
inputfile.close()
outputfile.close()