1、错误重现
[root@wrx python3]# vim spider.py
#!/usr/local/bin/python3
import urllib.request
import urllib.parse
import re
url = "http://www.sdlj.ltd/article"
values = {"id":"23"}
data = urllib.parse.urlencode(values)
request = urllib.request.Request(url,data)
response = urllib.request.urlopen(request)
html = response.read()
print(html)
#执行结果
[root@wrx python3]# python3 spider.py
Traceback (most recent call last):
File "spider.py", line 11, in <module>
response = urllib.request.urlopen(request)
File "/usr/local/lib/python3.4/urllib/request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.4/urllib/request.py", line 462, in open
req = meth(req)
File "/usr/local/lib/python3.4/urllib/request.py", line 1113, in do_request_
raise TypeError(msg)
TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.2、查询资料得知需要在urllib.parse.urlencode(values)后面加上encode(encoding="utf-8")
#修改后如下
#!/usr/local/bin/python3
import urllib.request
import urllib.parse
import re
url = "http://www.sdlj.ltd/article"
values = {"id":"23"}
data = urllib.parse.urlencode(values).encode(encoding="utf-8") #此处有修改
request = urllib.request.Request(url,data)
response = urllib.request.urlopen(request)
html = response.read()
print(html)
#执行结果
[root@wrx python3]# python3 spider.py
Traceback (most recent call last):
File "spider.py", line 11, in <module>
response = urllib.request.urlopen(request)
File "/usr/local/lib/python3.4/urllib/request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.4/urllib/request.py", line 470, in open
response = meth(req, response)
File "/usr/local/lib/python3.4/urllib/request.py", line 580, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python3.4/urllib/request.py", line 508, in error
return self._call_chain(*args)
File "/usr/local/lib/python3.4/urllib/request.py", line 442, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.4/urllib/request.py", line 588, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request