[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] Python TypeError: OpenerDirector object is not callable

啥问题啊各位大神
  1. #导入需要使用的模块
  2. from urllib import request #访问模块urllib
  3. import re #正规表达式(用来过滤信息?)
  4. import os #对系统有操作需要用到os模块
  5. import random #随机模块
  6. #设置多个浏览器备用,基于PC端
  7. agent_one='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'#Chrome Win7
  8. agent_two='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'#Firefox Win7
  9. agent_three='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'#Safari Win7
  10. agent_four='Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50'#Opera Win7
  11. agent_five='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)'#IE Win7+ie9
  12. agent_six='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'#Win7+ie8
  13. agent_seven='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)'#Win7XP+ie8
  14. agent_eight='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'#WinXP+ie8
  15. agent_night='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'#WinXP+ie7
  16. agent_ten='Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12'#WinXP+ie6
  17. agent_eleven='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)'#傲游3.1.7在Win7+ie9,高速模式
  18. agent_twelve='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)'#傲游3.1.7在Win7+ie9,IE内核兼容模式
  19. agent_thirteen='Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0'#搜狗
  20. agent_fourteen='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)'#搜狗3.0在Win7+ie9,高速模式
  21. agent_fifteen='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201'#360浏览器
  22. agent_seventeen='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201'#QQ浏览器
  23. agent_eighteen='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'#QQ浏览器6.9(11079)在Win7+ie9,IE内核兼容模式
  24. agent_nineteen='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'#阿云浏览器
  25. agent_twenty='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36'#
  26. #封装信息到List列表
  27. agent_list=[agent_one,agent_two,agent_three,
  28.             agent_four,agent_five,agent_seven,
  29.             agent_eight,agent_night,agent_ten,
  30.             agent_eleven,agent_twelve,agent_thirteen,
  31.             agent_fourteen,agent_eighteen,agent_nineteen,agent_twenty
  32.             ]
  33. Agent=random.choice(agent_list)
  34. #构造请求头信息
  35. header={'User-Agent':Agent}
  36. #网址
  37. url=r'http://www.baidu.com/'
  38. #构建处理器对象(专门处理HTTP/HTTPS请求的对象)
  39. http_hander=request.HTTPHandler()
  40. #创建自定义opener
  41. opener=request.build_opener(http_hander)
  42. #创建自定义请求对象
  43. req=request.Request(url,headers=header)
  44. #opener发送请求,获取响应信息,
  45. reponse=opener(req).read().decode()
  46. #Urlopen发送请求,获取响应信息,自动创建请求对象。缺点是无法自定义封装,无法添加自己的元素进去
  47. #reponse=request.urlopen(req).read().decode()
  48. pat=r'<title>(.*?)</title>'
  49. data=re.findall(pat,reponse)
  50. #print(type(data)) 输出结果是List列表信息
  51. print(data[0])
复制代码
执行结果:
Traceback (most recent call last):
  File "C:/Users/28158/.PyCharm2019.1/config/scratches/scratch.py", line 58, in <module>
    reponse=opener(req).read().decode()
TypeError: 'OpenerDirector' object is not callable

不要一行调用写到头,
要考虑异常处理的概念和可能。
如果opener(req)返回null后面就出错了。

以及应该使用第三方库requests代替urllib

还有百度已经全站HTTPS了。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 小渣飞 于 2019-11-9 11:02 编辑

回复 2# codegay


    嗯嗯,刚学python一星期,还有个问题就是
var='百度知道'
var_1='r''

pat=r+var

可是提示错误怎么办我想要的输出结果是 pat=r'百度知道'
这是源码
url=r'http://www.baidu.com/s?'
req=(input('输入需要爬取内容:'))
pat=(input('输入要爬取的关键字'))
wd={'wd':req}
#构造URL编码
wdd=urllib.parse.urlencode(wd)
url=url+wdd
req=request.Request(url)
reponse=request.urlopen(req).read().decode()
pat=r'+''pat''

data=re.findall(pat,reponse)
print('查找的内容:',req,'查找的关键字:',rap)
print(data)

TOP

引号和括号必须成对
字符串前加r表示是raw string,不转义其中的特殊字符。

你把r前缀的字符串改成三重引号的形式更好理解和阅读一点。
  1. """这是三重引号的字符串"""
  2. '''三重单引号字符串'''
复制代码
1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 4# codegay


    嗯嗯明白了谢谢你

TOP

返回列表