Python爬虫 爬取翻译类网站

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


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

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


用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()







你可能感兴趣的:(Python爬虫)