欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫 - 使用urllib

程序员文章站 2022-05-03 20:05:03
...

urlopen()

urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理授权验证,重定向,cookies 以及其它内容。我们来打开httpbin.org这个测试网站。

import urllib.request

response = urllib.request.urlopen('https://httpbin.org/get')
print(response.read().decode('utf-8'))

运行结果如下:

{
  "args": {}, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.7"
  }, 
  "origin": "116.227.107.42", 
  "url": "https://httpbin.org/get"
}

看下它返回的到底是什么?

import urllib.request

response = urllib.request.urlopen('https://httpbin.org/get')
print(type(response))

运行结果如下:

<class 'http.client.HTTPResponse'>

这是一个 HTTPResposne 类型的对象,它主要包含的方法有 read([amt])、readinto(b)、getheader(name, default=None)、getheaders()、fileno() 方法和 msg、version、status、reason、debuglevel、closed 属性。

得到这个对象之后,我们把它赋值为 response 变量,然后就可以调用这些方法和属性,得到返回结果的一系列信息了。

例如调用 read() 方法可以得到返回的网页内容,调用 status 属性就可以得到返回结果的状态码,如 200 代表请求成功,404 代表网页未找到等。

实例感受一下:

import urllib.request

response = urllib.request.urlopen('https://httpbin.org/get')
print(response.status)
print(response.getheaders())

运行结果如下:

200
[('Connection', 'close'), ('Server', 'gunicorn/19.9.0'), ('Date', 'Thu, 31 Jan 2019 12:13:29 GMT'), ('Content-Type', 'application/json'), ('Content-Length', '236'), ('Access-Control-Allow-Origin', '*'), ('Access-Control-Allow-Credentials', 'true'), ('Via', '1.1 vegur')]

利用最基本的 urlopen() 方法,我们可以完成最基本的简单网页的 GET 请求抓取。