鱼C论坛

 找回密码
 立即注册
查看: 9218|回复: 1

[已解决]TypeError: expected string or bytes-like object

[复制链接]
发表于 2016-7-29 16:11:42 | 显示全部楼层 |阅读模式

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

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

x
新人求教 用的spyder  win10系统
python versio:3.5.2
请问,那一步哪里错了 还没看出来0.0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Jul 29 14:24:31 2016

  4. @author: mozzielx
  5. """
  6. from urllib.parse import urlencode
  7. from urllib.request import Request,urlopen
  8. '''模拟登录'''
  9. CaptchaUrl = "http://jwxt1.cumt.edu.cn/CheckCode.aspx"#验证码网址
  10. PostUrl = "http://jwxt1.cumt.edu.cn/default2.aspx"#登录时提交data的页面
  11. # 用户名和密码
  12. username = 'xx'
  13. password = 'xx'
  14. #获取验证码图片————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————#
  15. request_pic = Request(CaptchaUrl)
  16. request_pic.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36')
  17. response_pic = urlopen(request_pic)
  18. pic = response_pic.read()
  19. m_cookie = response_pic.getheader("Set-Cookie")#访问验证码地址,获取cookie
  20. # 保存验证码到本地
  21. with open('验证码.jpg', 'wb') as f:
  22.     f.write(pic)
  23. SecretCode = input('输入验证码: ')# 手动打开保存的验证码图片 输入
  24. #下面是登录教务处——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————#
  25. postData_login = {
  26.             '__VIEWSTATE': 'dDwyODE2NTM0OTg7Oz6gIzHUHUo9I4p23LsZjjNrYu9EnQ==',
  27.             'txtUserName': username,
  28.             'TextBox2': password,
  29.             'txtSecretCode': SecretCode, #验证码
  30.             'RadioButtonList1': '学生',
  31.             'Button1': '',
  32.             'lbLanguage': '',
  33.             'hidPdrs': '',
  34.             'hidsc': ''
  35.                 }
  36. headers_login = {
  37.             'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  38.             'Accept-Encoding':'gzip, deflate',
  39.             'Accept-Language':'zh-CN,zh;q=0.8',
  40.             'Cache-Control':'max-age=0',
  41.             'Connection':'keep-alive',
  42.             'Content-Type':'application/x-www-form-urlencoded',
  43.             'Cookie':m_cookie,
  44.             'Host':'jwxt1.cumt.edu.cn',
  45.             'Origin':'http://jwxt1.cumt.edu.cn',
  46.             'Referer':'http://jwxt1.cumt.edu.cn/',
  47.             'Upgrade-Insecure-Requests':'1',
  48.             'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'
  49.                 }
  50. data_login = urlencode(postData_login,encoding='gb2312').encode('gb2312')#因为data含中文,所以encoding='xxxx'
  51. request_login = Request(PostUrl, data_login, headers_login)
  52. response_login = urlopen(request_login)
  53. result_login = response_login.read().decode('gb2312')# 由于该网页是gb2312的编码,所以需要解码
  54. #print(result_login)# 打印登录后的页面
  55. #下面是查成绩—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————#
  56. url_grade ='http://jwxt1.cumt.edu.cn/xscj_gc.aspx?xh=03141060&xm=%C1%D6%D0%C0&gnmkdm=N121605'#查成绩网址
  57. postdata_grade ={'__VIEWSTATE':'dDwxODI2NTc3MzMwO3Q8cDxsPHhoOz47bDwwMzE0MTA2MDs+PjtsPGk8MT47PjtsPHQ8O2w8aTwxPjtpPDM+O2k8NT47aTw3PjtpPDk+O2k8MTE+O2k8MTM+O2k8MTY+O2k8MjY+O2k8Mjc+O2k8Mjg+O2k8MzU+O2k8Mzc+O2k8Mzk+O2k8NDE+O2k8NDU+Oz47bDx0PHA8cDxsPFRleHQ7PjtsPOWtpuWPt++8mjAzMTQxMDYwOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzlp5PlkI3vvJrmnpfmrKM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOWtpumZou+8muacuueUteW3peeoi+WtpumZojs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w85LiT5Lia77yaOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDzmnLrmorDlt6XnqIs7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPOihjOaUv+ePre+8muacuuaisOW3peeoizIwMTQtMDbnj607Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDIwMTQwMzExOz4+Oz47Oz47dDx0PHA8cDxsPERhdGFUZXh0RmllbGQ7RGF0YVZhbHVlRmllbGQ7PjtsPFhOO1hOOz4+Oz47dDxpPDM+O0A8XGU7MjAxNS0yMDE2OzIwMTQtMjAxNTs+O0A8XGU7MjAxNS0yMDE2OzIwMTQtMjAxNTs+Pjs+Ozs+O3Q8cDw7cDxsPG9uY2xpY2s7PjtsPHdpbmRvdy5wcmludCgpXDs7Pj4+Ozs+O3Q8cDw7cDxsPG9uY2xpY2s7PjtsPHdpbmRvdy5jbG9zZSgpXDs7Pj4+Ozs+O3Q8cDxwPGw8VmlzaWJsZTs+O2w8bzx0Pjs+Pjs+Ozs+O3Q8QDA8Ozs7Ozs7Ozs7Oz47Oz47dDxAMDw7Ozs7Ozs7Ozs7Pjs7Pjt0PEAwPDs7Ozs7Ozs7Ozs+Ozs+O3Q8O2w8aTwwPjtpPDE+O2k8Mj47aTw0Pjs+O2w8dDw7bDxpPDA+O2k8MT47PjtsPHQ8O2w8aTwwPjtpPDE+Oz47bDx0PEAwPDs7Ozs7Ozs7Ozs+Ozs+O3Q8QDA8Ozs7Ozs7Ozs7Oz47Oz47Pj47dDw7bDxpPDA+O2k8MT47PjtsPHQ8QDA8Ozs7Ozs7Ozs7Oz47Oz47dDxAMDw7Ozs7Ozs7Ozs7Pjs7Pjs+Pjs+Pjt0PDtsPGk8MD47PjtsPHQ8O2w8aTwwPjs+O2w8dDxAMDw7Ozs7Ozs7Ozs7Pjs7Pjs+Pjs+Pjt0PDtsPGk8MD47aTwxPjs+O2w8dDw7bDxpPDA+Oz47bDx0PEAwPHA8cDxsPFZpc2libGU7PjtsPG88Zj47Pj47Pjs7Ozs7Ozs7Ozs+Ozs+Oz4+O3Q8O2w8aTwwPjs+O2w8dDxAMDxwPHA8bDxWaXNpYmxlOz47bDxvPGY+Oz4+Oz47Ozs7Ozs7Ozs7Pjs7Pjs+Pjs+Pjt0PDtsPGk8MD47PjtsPHQ8O2w8aTwwPjs+O2w8dDxwPHA8bDxUZXh0Oz47bDxaSVNUOz4+Oz47Oz47Pj47Pj47Pj47dDxAMDw7Ozs7Ozs7Ozs7Pjs7Pjs+Pjs+Pjs+ZvafybAT0oLKL3rUY+aWJ0cpEco=',
  58.                 '__VIEWSTATEGENERATOR':'DB0F94E3',
  59.                 'ddlXN':'2015-2016',
  60.                 'ddlXQ':'2',
  61.                 'Button1':'按学期查询'}
  62. headers_grade = {   'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  63.                     'Accept-Encoding':'gzip, deflate',
  64.                     'Accept-Language':'zh-CN,zh;q=0.8',
  65.                     'Connection':'keep-alive',
  66.                     'Content-Type':'application/x-www-form-urlencoded',
  67.                     'Cookie':m_cookie,
  68.                     'Host':'jwxt1.cumt.edu.cn',
  69.                     'Origin':'http://jwxt1.cumt.edu.cn',
  70.                     'Referer':'http://jwxt1.cumt.edu.cn/xscj_gc.aspx?xh=03141060&xm=%C1%D6%D0%C0&gnmkdm=N121605',
  71.                     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'}
  72. data_grade = urlencode(postdata_grade,encoding='gb2312').encode('gb2312')
  73. request_grade = Request(url_grade, data_grade, headers_grade)
  74. response_grade = urlopen(request_grade)
  75. result_grade = response_grade.read().decode('gb2312')
  76. print(result_grade)
  77.    
复制代码

下面是报错信息
  1. runfile('E:/python practice/数据爬取/教务系统.py', wdir='E:/python practice/数据爬取')

  2. 输入验证码: v523
  3. Traceback (most recent call last):

  4.   File "<ipython-input-20-e7fcb8a24997>", line 1, in <module>
  5.     runfile('E:/python practice/数据爬取/教务系统.py', wdir='E:/python practice/数据爬取')

  6.   File "F:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
  7.     execfile(filename, namespace)

  8.   File "F:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 89, in execfile
  9.     exec(compile(f.read(), filename, 'exec'), namespace)

  10.   File "E:/python practice/数据爬取/教务系统.py", line 53, in <module>
  11.     response_login = urlopen(request_login)

  12.   File "F:\Anaconda3\lib\urllib\request.py", line 163, in urlopen
  13.     return opener.open(url, data, timeout)

  14.   File "F:\Anaconda3\lib\urllib\request.py", line 466, in open
  15.     response = self._open(req, data)

  16.   File "F:\Anaconda3\lib\urllib\request.py", line 484, in _open
  17.     '_open', req)

  18.   File "F:\Anaconda3\lib\urllib\request.py", line 444, in _call_chain
  19.     result = func(*args)

  20.   File "F:\Anaconda3\lib\urllib\request.py", line 1282, in http_open
  21.     return self.do_open(http.client.HTTPConnection, req)

  22.   File "F:\Anaconda3\lib\urllib\request.py", line 1254, in do_open
  23.     h.request(req.get_method(), req.selector, req.data, headers)

  24.   File "F:\Anaconda3\lib\http\client.py", line 1106, in request
  25.     self._send_request(method, url, body, headers)

  26.   File "F:\Anaconda3\lib\http\client.py", line 1146, in _send_request
  27.     self.putheader(hdr, value)

  28.   File "F:\Anaconda3\lib\http\client.py", line 1082, in putheader
  29.     if _is_illegal_header_value(values[i]):

  30. TypeError: expected string or bytes-like object
复制代码
最佳答案
2016-7-29 17:26:07
TypeError: expected string or bytes-like object
类型错误:预期的是 字符串 或 字节串对象
---------------------
  1. request_login = Request(PostUrl, data_login, headers_login)
  2. response_login = urlopen(request_login)
复制代码

urlopen(url) 接受的 url ,是个链接地址字符串。
而你 给了个 Request 对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-29 17:26:07 | 显示全部楼层    本楼为最佳答案   
TypeError: expected string or bytes-like object
类型错误:预期的是 字符串 或 字节串对象
---------------------
  1. request_login = Request(PostUrl, data_login, headers_login)
  2. response_login = urlopen(request_login)
复制代码

urlopen(url) 接受的 url ,是个链接地址字符串。
而你 给了个 Request 对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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