Python 爬虫 urllib模块:post方式
admin
2023-07-15 08:02:14
0次

本程序以爬取 'http://httpbin.org/post' 为例

格式:

  导入urllib.request

  导入urllib.parse

  数据编码处理,再设为utf-8编码:  bytes(urllib.parse.urlencode({'word': 'hello'}), encoding = 'utf-8')

  打开爬取的网页: response = urllib.request.urlopen('网址', data = data)

  读取网页代码: html = response.read()

  打印:

      1.不decode 

      print(html) #爬取的网页代码会不分行,没有空格显示,很难看

      2.decode

      print(html.decode()) #爬取的网页代码会分行,像写规范的代码一样,看起来很舒服

  查询请求结果:

      a. response.status # 返回 200:请求成功  404:网页找不到,请求失败

      b. response.getcode() # 返回 200:请求成功  404:网页找不到,请求失败



1.不decode的程序如下:

import urllib.request
import urllib.parsse

data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding = 'utf-8')
response = urllib.request.urlopen(' data = data )
html = response.read()

print(html)
print("------------------------------------------------------------------")
print("------------------------------------------------------------------")
print(response.status)
print(response.getcode())


运行结果:

Python 爬虫 urllib模块:post方式


2.带decode的程序如下:

import urllib.request
import urllib.parsse

data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding = 'utf-8')
response = urllib.request.urlopen(' data = data )
html = response.read()

print(html.decode())
print("------------------------------------------------------------------")
print("------------------------------------------------------------------")
print(response.status)
print(response.getcode())


运行结果:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "word": "hello"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Content-Length": "10", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.4"
  }, 
  "json": null, 
  "origin": "106.14.17.222", 
  "url": "http://httpbin.org/post"
}

------------------------------------------------------------------
------------------------------------------------------------------
200
200


为什么要用bytes转换?

因为

data = urllib.parse.urlencode({'word': 'hello'}) ##没有用bytes
response = urllib.request.urlopen('http://httpbin.org/post', data = data )
html = response.read()

错误提示:

Traceback (most recent call last):
  File "/usercode/file.py", line 15, in 
    response = urllib.request.urlopen('http://httpbin.org/post', data = data )
  File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 453, in open
    req = meth(req)
  File "/usr/lib/python3.4/urllib/request.py", line 1104, in do_request_
    raise TypeError(msg)
TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.

由此可见,post方式需要将请求内容用二进制编码。

class bytes([source[, encoding[, errors]]])

    Return a new “bytes” object, which is an immutable sequence of integers in the range 0 <= x < 256. bytes is an immutable version of bytearray– it has the same non-mutating methods and the same indexing and slicing behavior.

Accordingly, constructor arguments are interpreted as for bytearray().


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...