Wgq 发表于 2017-3-12 00:27:22

关于Python入门视频055讲,有两个问题

第一,修改head 参数无效 或是说没有 add_header(key,val)
第二,查帮助文档,查询的是Request.add_header(key,val),怎样理解?Python版本3.6.0import urllib.request
import urllib.parse
import json
import time
while True:
    content = input("请输入需要翻译的内容:(输入wq,退出程序)\n")
    if content =='wq':
      break
    else:
      url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict2.index'
      data = {}
      '''
      head ={}
      head['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'
      '''
      data['type'] = 'AUTO'
      data['i'] = content
      data['doctype'] = 'json'
      data['xmlVersion'] = '1.8'
      data['keyfrom'] = 'fanyi.web'
      data['ue'] = 'UTF-8'
      data['action'] = 'FY_BY_CLICKBUTTON'
      data['typoResult'] = 'true'
      data = urllib.parse.urlencode(data).encode('utf-8')
      response = urllib.request.urlopen(url,data)
      response.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0')
      # 隐藏的第二种方法是:response.add_header(),删掉head,追加head
      html = response.read().decode('utf-8')
      target = json.loads(html)
      print(target['translateResult']['tgt'])
      time.sleep(1)

lumber2388779 发表于 2017-3-12 09:08:21

只是你的调用顺序问题
add_header是放在urllib.request.urlopen之前
你最重要少了几句
req =urlib.request.Request(url,data)
req.add_header('Refer','http://fanyi.youdao.com')
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0')
然后在调用response = urllib.request.urlopen(url,data)
到了urlopen已经是建立对象后进行访问,这个时候你的Request缺少header,导致你再去设置head会显示head无效

Wgq 发表于 2017-3-12 21:27:43

lumber2388779 发表于 2017-3-12 09:08
只是你的调用顺序问题
add_header是放在urllib.request.urlopen之前
你最重要少了几句


明白了,确实是这样。感恩!!!
页: [1]
查看完整版本: 关于Python入门视频055讲,有两个问题