4、利用Request和Beautiful Soup抓取指定URL内容

  所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。

  类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。

  在Python3.5中,我们使用Request这个组件来抓取网页。

  Request是Python的一个获取URLs(Uniform Resource Locators)的组件。

  它以get函数的形式提供了一个非常简单的接口。

  最简单的Request的应用代码只需要四行。

  我们新建一个文件test.py来感受一下Request的作用:

import requests
from bs4 import BeautifulSoup

#coding:utf-8

url = 'http://www.baidu.com'
try:
    response = requests.get(url)
#URLError
#通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。
except:
    data = {
        'url':url,
        'error_type':'requests.get.error'
    }
    print(data)
#HTTPError
#服务器上每一个HTTP 应答对象response包含一个数字"状态码"。
#有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答。
#HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成.
#比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。
else:
    response.encoding = 'utf8'
    print(response.text)

  我们可以打开百度主页,右击,选择查看源代码(火狐OR谷歌浏览器均可),会发现也是完全一样的内容。

  也就是说,上面这四行代码将我们访问百度时浏览器收到的代码们全部打印了出来。

  这就是一个最简单的Request的例子。

  除了”http:”,URL同样可以使用”ftp:”,”file:”等等来替代。

  HTTP是基于请求和应答机制的:

  客户端提出请求,服务端提供应答。

  如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过 Response.raise_for_status() 来抛出异常

  200:请求成功      处理方式:获得响应的内容,进行处理

  201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到

  202:请求被接受,但处理尚未完成    处理方式:阻塞等待

  204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃

  300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。    处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃

  301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源    处理方式:重定向到分配的URL

  302:请求到的资源在一个不同的URL处临时保存     处理方式:重定向到临时的URL

  304 请求的资源未更新     处理方式:丢弃

  400 非法请求     处理方式:丢弃

  401 未授权     处理方式:丢弃

  403 禁止     处理方式:丢弃

  404 没有找到     处理方式:丢弃

  5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求    处理方式:丢弃

  ------------------------------------------------------------------------------------------------

  HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号。

  Error Codes错误码

  因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。

  BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。

  当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。

  你可以使用HTTPError实例作为页面返回的应答对象response。

你可能感兴趣的:(Python爬虫)