鱼C论坛

 找回密码
 立即注册
查看: 2753|回复: 5

55讲时修改User-Agent老是报错,求教怎么回事?

[复制链接]
发表于 2016-11-5 23:02:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 癫材 于 2016-11-5 23:04 编辑

import urllib.parse
import urllib.request

def pa(RUL,data=None,UA=None):#data为字典类型参数,是访问网页时需上传给服务器的数据
    head={}
    head['User-Agent']=UA #或在访问前用req.add_header('User-Agent',UA)修改客户端信息,其中User-Agent里写的是客户端信息
    if data!=None:
        data=urllib.parse.urlencode(data).encode('utf-8')  #将字典类型参数转换为可上传的数据类型,并将其以utf-8形式编码
    response=urllib.request.urlopen(RUL,data,head)    #将向RUL(网址)请求的响应赋给response(响应),header
#            urllib.request.urlopen(url,data=None,[timeout]*,cafile=None,capath=None,cadefault=Faise)



#相当于:
#   req=urllib.request.Request(RUL,data)
#   response=urllib.request.urlopen(req)
                                       
    html=response.read().decode("utf-8")                    #将response中的内容读取,并视作utf-8形式decode(解码)成Unicode(统一码)传给html(超文本标记语言)

if __name__=='__main__':
    data={}
    data['type']='AUTO'
    data['i']='I love you!'
    data['doctype']='json'
    data['xmlVersion']='1.8'
    data['keyfrom']='fanyi.web'
    data['ue']='UTF-8'
    data['action']='FY_BY_CLICKBUTTON'
    data['typoResult']='true'

    pa("http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null",data,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-6 12:17:01 | 显示全部楼层
贴报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-6 13:00:43 | 显示全部楼层

Traceback (most recent call last):
  File "E:\8.小甲鱼_python—————————第八部\笔记\爬虫\爬虫示例.py", line 31, in <module>
    pa("http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null",data,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
  File "E:\8.小甲鱼_python—————————第八部\笔记\爬虫\爬虫示例.py", line 9, in pa
    response=urllib.request.urlopen(RUL,data,head)    #将向RUL(网址)请求的响应赋给response(响应),header
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 466, in open
    response = self._open(req, data)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 484, in _open
    '_open', req)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 444, in _call_chain
    result = func(*args)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 1282, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\urllib\request.py", line 1254, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 1106, in request
    self._send_request(method, url, body, headers)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 1151, in _send_request
    self.endheaders(body)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 1102, in endheaders
    self._send_output(message_body)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 934, in _send_output
    self.send(msg)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 877, in send
    self.connect()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\http\client.py", line 849, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\socket.py", line 699, in create_connection
    sock.settimeout(timeout)
TypeError: an integer is required (got type dict)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 13:13:42 | 显示全部楼层
癫材 发表于 2016-11-6 13:00
Traceback (most recent call last):
  File "E:\8.小甲鱼_python—————————第八部\笔记\爬虫\ ...


urllib.request.urlopen() 方法不能用于传输自定义 headers
需要用 urllib.request.Request() 方法
  1. req=urllib.request.Request(RUL,data, head)
  2. response=urllib.request.urlopen(req)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
癫材 + 5 + 5 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-6 13:17:36 | 显示全部楼层
癫材 发表于 2016-11-6 13:00
Traceback (most recent call last):
  File "E:\8.小甲鱼_python—————————第八部\笔记\爬虫\ ...

http://bbs.fishc.com/forum.php?mod=redirect&goto=findpost&ptid=77912&pid=2699252
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 13:23:29 | 显示全部楼层
hldh214 发表于 2016-11-6 13:13
urllib.request.urlopen() 方法不能用于传输自定义 headers
需要用 urllib.request.Request() 方法

正解,我也犯过这错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 04:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表