关键词搜索

源码搜索 ×
×

Python爬虫实战:翻译文本

发布2019-04-06浏览1048次

详情内容

1. 前期准备

这个例子需要利用有道词典来翻译文本
确定目标网址:http://fanyi.youdao.com
审查元素,确定请求URL
在这里插入图片描述Request URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
接下来需要关注几个重要点:

由于有道翻译已经加入了反爬虫机制,所以,可以使用这个URL(原因可参考)
Request URL:http://fanyi.youdao.com/translateo?smartresult=dict&smartresult=rule

User-Agent:普通浏览器会通过该内容向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识

User-Agent: Mozilla/5.0 
(Windows NT 6.1; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36

    如果使用Python访问的话,User-Agent会被定义为Python-urllib/3.4
    所以检查这个就可以查到请求是来自正常的浏览器单击还是“非人类”的访问
    但是User-Agent是可以修改的

    Form Data:这个就是POST提交的内容
    在这里插入图片描述

    2. 如何使用Python提交POST表单

    这里需要用到urlopen函数的data参数

    urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
                *, cafile=None, capath=None, cadefault=False)
    
    • 1
    • 2

    如果给这个参数赋值,那么HTTP的请求就是使用POST方式;
    如果data的值是NULL,也就是默认值,那么HTTP的请求就是使用GET方式。
    注意
    这个data参数的值必须符合这个application/x-www-form-urlencoded的格式,可以使用urllib.parse.urlencode()将字符串转换为这个格式

    3. 代码

    import urllib.request
    import urllib.parse
    import json
    # 浏览器请求的网址
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    content=input("请输入需要翻译的内容:")
    data={}
    data['i']=content
    data['from']='AUTO'
    data['to']='AUTO'
    data['smartresult']='dict'
    data['client']='fanyideskweb'
    data['doctype']='json'
    data['version']='2.1'
    data['keyfrom']='fanyi.web'
    data['action']='FY_BY_CLICKBUTTION'
    data['typoResult']='false'
    # 使用urllib.parse.urlencode()转换字符串
    data = urllib.parse.urlencode(data).encode('utf-8')
    response = urllib.request.urlopen(url,data)
    html = response.read().decode('utf-8')
    target = json.loads(html)
    print("翻译结果:%s"% (target['translateResult'][0][0]['tgt']))
    
      4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4. 注意

    1. 引入json包的目的
      直接打印html的结果为:
    print(html)
    print(type(html))
    #{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"我喜欢python","tgt":"I like python"}]]}
    #str
    
      4

    这里html实际上是一个json格式的字符串(JSON是一种轻量级的数据交换格式,说白了 这里就是用字符串把Python的数据结构封装起来)所以只需要解析这个JSON格式的字符串即可

    import json
    target=json.loads(html)
    type(target)
    #<class 'dict'>
    
      4

    可以看到通过json将其转换成了字典,接下来输出需要显示的内容即可。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载