python3爬虫POST传递参数问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3爬虫POST传递参数问题相关的知识,希望对你有一定的参考价值。
Traceback (most recent call last):
File "/home/qians2014/文档/_proj_/spider.py", line 11, in <module>
response = urllib.request.urlopen(req)
File "/usr/lib/python3.3/urllib/request.py", line 160, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.3/urllib/request.py", line 471, in open
req = meth(req)
File "/usr/lib/python3.3/urllib/request.py", line 1183, in do_request_
raise TypeError(msg)
TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
这个是run以后的问题。求解。下面贴上我的代码。用的python3.3 urllib写的。
import urllib.request
import urllib.parse
url = "http://xscj.hit.edu.cn/hitjwgl/xs/jscx_all.asp"
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Ubuntu Chromium/30.0.1599.114 Chrome/30.0.1599.114 Safari/537.36'
values = 'Submit':'%C8%AB%B2%BF%E4%AF%C0%C0','ZC':'11','XQ':'%D2%BB%D0%A3%C7%F8'
headers = 'User-Agent':user_agent
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url,data,headers)
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8"))
试下。本回答被提问者采纳
Python爬虫知识点——请求
请求
:请求方法、请求网址、请求头、请求体
请求方法:
常见的为:GET、POST
GET与POST主要区别:
- GET请求参数包含在URL,可从URL中看出。POST请求的URL不包含参数,都是通过表单的形式传输的,包含在请求体中
- GET请求提交的数据最多只有1024字节,POST无限制
其他还有HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE
请求的网址:
即URL,我们想要请求的资源
请求头:
用来说明服务器要使用的附加信息,比较总要的有Cookie、Referer、User-Agent等。
Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
Accept-Language:指定客户端可接受的语言类型。
Accept-Encoding:指定客户端可接受的内容编码。
Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位 置。从HTTP1.1版本开始,请求必须包含此内容。
Cookie:也常用复数形式Cookies, 是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输人用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies 并将其发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
User-Agent: 简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等消息。在做爬虫时加上此信息,可以伪装成浏览器;如果不加,很可能被识别出为爬虫
Content-Type:也叫互联网媒体类型( Intermet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。更多对应关系可以查看此对表:http://tool.oschina.net/commons
文件扩展名 | Content-Type(Mime-Type) |
---|---|
.html、 .htx 、 .htm | text/html |
.gif | image/gif |
.json | application/json |
? Content-Type与POST提交数据方式的关系
Content-Type | 提交数据的方式 |
---|---|
appication/x-www-urlencodeed | 表单数据 |
multipart/form-data | 表单文件上传 |
applicatiobn/json | 序列化json数据 |
text/html | XML数据 |
如果构造POST请求,需要使用正确的Content-Type,不然可能导致POST提交后无法正常响应
==>因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。
请求体:
请求体一般承载的内容是POST请求中的表单数据,而对GET请求,请求体则为空。
文章摘自崔庆才的《Python3网络爬虫开发实战》
以上是关于python3爬虫POST传递参数问题的主要内容,如果未能解决你的问题,请参考以下文章