找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 63859|回复: 4

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

[复制链接]
发表于 2019-11-8 23:56:01 | 显示全部楼层 |阅读模式
啥问题啊各位大神
  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
发表于 2019-11-9 06:02:25 | 显示全部楼层
不要一行调用写到头,
要考虑异常处理的概念和可能。
如果opener(req)返回null后面就出错了。

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

还有百度已经全站HTTPS了。
 楼主| 发表于 2019-11-9 10:52:11 | 显示全部楼层
本帖最后由 小渣飞 于 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)
发表于 2019-11-9 13:21:46 | 显示全部楼层
引号和括号必须成对
字符串前加r表示是raw string,不转义其中的特殊字符。

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

评分

参与人数 1技术 +1 收起 理由
小渣飞 + 1 =-=

查看全部评分

 楼主| 发表于 2019-11-9 15:25:38 | 显示全部楼层
回复 4# codegay


    嗯嗯明白了谢谢你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:14 , Processed in 0.010745 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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