zoukankan      html  css  js  c++  java
  • python 翻译爬虫

     1 import urllib.request
     2 import urllib.parse
     3 import json
     4 while 1:
     5     
     6     content=input("请输入要翻译的内容:")
     7     url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link"
     8     data={}
     9     data['type']='AUTO'
    10     data['i']=content
    11     data['doctype']='json'
    12     data['keyfrom']='fanyi.web'
    13     data['ue']='UTF-8'
    14     data['typoResult']='true'
    15 data=urllib.parse.urlencode(data).encode('utf-8') #urlencode()主要作用就是将url附上要提交的数据。

    16 response=urllib.request.urlopen(url,data) 17 html=response.read().decode('utf-8') 18 target=json.loads(html) 19 print("翻译结果: %s" % (target['translateResult'][0][0]['tgt']))

    这是form Data中的内容

    1. i:
      你好
    2. from:
      AUTO
    3. to:
      AUTO
    4. smartresult:
      dict
    5. client:
      fanyideskweb
    6. salt:
      1497075070071
    7. sign:
      fbdf42a5b8f48f0defc722823ef1be6b
    8. doctype:
      json
    9. version:
      2.1
    10. keyfrom:
      fanyi.web
    11. action:
      FY_BY_CLICKBUTTON
    12. typoResult:
      true

    进行分析,首先引入三个模块,

    首先找到网页版有道词典的在线翻译打开检查,找到network,随便翻译一段话,打开产生的数据,

    找到在Headers下的form Data表

    我们要解决,如何用python进行POst表单提交:这里urlopen函数有一个data参数,如果我们给这个参数赋值,那么请求就是POST方式

                                                                         如果data没有赋值HTTP请求就是GET方式

    在python3的文档里,告诉我们要使用data这个参数,就必须要用urllib.request.urlopen()将其转换为某种格式

    step:

    我们首先要将data表单的内容进行赋值,不难发现,我们提交的要翻译的内容是通过表单中“i”这一项来传递的。

    然后对data进行赋值,注意格式也要转换,并且使用“utf-8”解码

    下面利用urllib.request.urlopen()来打开url,并且使用第二参数,将data提交

    得到的html页面

    由于数据交换使用json传输,这里我们用json.loads()解码,并且将值赋给target

    target的值其实是一个字典,

    {'smartResult': {'entries': ['', 'hello;hi'], 'type': 1}, 'translateResult': [[{'tgt': 'How are you', 'src': '你好'}]], 'elapsedTime': 1, 'errorCode': 0, 'type': 'ZH_CN2EN'}

    字典的操作忘了吗,复习一遍吧:

    >>>target={'smartResult': {'entries': ['', 'hello;hi'], 'type': 1}, 'translateResult': [[{'tgt': 'How are you', 'src': '你好'}]], 'elapsedTime': 1, 'errorCode': 0, 'type': 'ZH_CN2EN'}

    >>>print(target['translateResult']

    [[{'tgt': 'How are you', 'src': '你好'}]]

    >>>print(target['translateResult'][0][0]['tgt'])

    How are you

    over!

    (伪造表单,打开页面提交表单,获得返回response,从response中提取结果)

    知识点:

    1,data=urllib.parse.urlencode(data)

     

    2,response=urllib.request.urlopen(url,data) urlopen第二参数打开url,提交form data
  • 相关阅读:
    vue项目刷新当前页面最优解决方式
    nprogress 进度条
    Element Tabs 标签页实现右键自定义菜单
    vue项目中清除定时器(清除定时器不成功)
    Vue.Draggable学习总结 ( Draggable为基于Sortable.js的vue组件,用以实现拖拽功能 )
    vue缓存及路由和生命周期触发的完整流程
    Vue webpack 打包Vue项目后动态配置API接口地址及配置文件
    Vue——element-ui下拉框的几个参数
    Vue——radio、checkbox、select 标签的双向绑定
    Vue——路由的跳转方式
  • 原文地址:https://www.cnblogs.com/jjj-fly/p/6869424.html
Copyright © 2011-2022 走看看