爬虫第一篇——Google翻译服务

 自学爬虫第一篇,尝试Google翻译

# -*- coding: UTF-8 -*-
from urllib import request
from io import BytesIO
import gzip
import json

if __name__ == "__main__":
    word = 'apple'
    #设置请求地址
    translateUrl = 'https://translate.google.cn/translate_a/single?'
    #设置data信息
    #get方式的请求可以直接以string类型拼装,如果data中存在中文信息还是需要encode
    #post方式的请求需要创建字典类型(譬如:Form_Data = {...})然后采用parse.urlencode(Form_Data).encode('utf-8')进行编码
    #from urllib import parse
    #parse.urlencode(Form_Data).encode('utf-8')
    data = 'client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=6&ssel=8&tsel=3&kc=9&tk=135654.296274&q='+word
    #
    #Google翻译的服务data中有一个tk值是根据你需要翻译的东西计算出来的(猜测),百度了一下也有大神已经整理了相应的算法。先放在这儿,后面继续研究。
    #
    ########client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=2&ssel=0&tsel=0&kc=1&tk=671766.840866&q=eye
    ########client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=1&pc=1&ssel=0&tsel=0&kc=3&tk=835139.666359&q=spider
    ########client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=1&ssel=0&tsel=0&kc=5&tk=432303.3099&q=big
    ########client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&otf=1&ssel=0&tsel=0&kc=5&tk=377603.219063&q=small
    translateUrl = translateUrl + data
    #设置headers信息
    #如果没有headers信息,部分网站会返回403
    #urllib.error.HTTPError: HTTP Error 403: Forbidden
    headers = {
    'authority':'translate.google.cn',
    'method':'GET',
    'path':'/translate_a/single?'+data,
    'scheme':'https',
    'accept': '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'referer': 'https://translate.google.cn/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
    'x-client-data': 'CIy2yQEIo7bJAQjBtskBCKmdygEIqKPKAQixp8oBCL+nygEI4qjKARj5pcoB'
    }
    #设置request请求信息,加入url、headers
    req = request.Request(url=translateUrl,headers=headers)
    #访问url
    res = request.urlopen(req)
    #########这里需要注意#########
    #1、一般情况获取response后直接解码后方可操作
    #html = res.read().decode('urf-8')
    #2、若报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte ,则表示解码发生错误
    #将代码分步重写后可先打印查看返回的具体样例
    #html = res.read()
    #print(html)
    #打印后:b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb5X\xcb\x8e\x1...............
    #以'b'\x1f\x8b\x08'开头表示数据经过压缩处理gzip,此时需要先解压,再进行解码操作
    html = res.read()
    buff = BytesIO(html)
    f = gzip.GzipFile(fileobj=buff)
    res = f.read().decode('utf-8')
    #根据返回结果类型,采用不能的解析方式
    #查看数据后,此处采用json解析
    translate_results = json.loads(res)
    translate_results = translate_results[0][0][0]
    print("%s —> %s" %(word,translate_results))

注:google翻译的请求包中有一个tk值,是根据入参计算出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值