7. 网络爬虫基础使用

urllib介绍:

  • 在Python2版本中,有urllib和urlib2两个库可以用来实现request的发送。
  • 而在Python3中,已经不存在urllib2这个库了,统一为urllib。
  • Python3 urllib库官方链接:https://docs.python.org/3/library/urllib.html
    • urllib中包括了四个模块,包括:
    • urllib.request:可以用来发送request和获取request的结果
    • urllib.error:包含了urllib.request产生的异常
    • urllib.parse:用来解析和处理URL
    • urllib.robotparse:用来解析页面的robots.txt文件

urllib.request:

  • urllib.request 模块提供了最基本的构造 HTTP 请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容。

  • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

  • 参数:url地址

    • data:可选附加参数,字节流编码格式(bytes() 可转换),请求方式会变为POST
    • timeout (超时时间)单位为秒,若请求超出了设置时间还没有响应,则抛异常
  • 返回HTTPResposne类型的对象:
  • response.read() 就可以得到返回的网页内容,可使用decode("utf-8")解码字符串
  • response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到

3. urllib.request.Request:

  • 利用urlopen()方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求。
  • 使用强大的Request类可以在请求中加入需要的headers等信息。
    class urllib.request.Request(url, data=None, headers={}, origin_req_host=None,    
          unverifiable=False, method=None)
  • 第一个参数是请求链接,这个是必传参数,其他的都是可选参数

  • data 参数如果要传必须传 bytes (字节流)类型的,如果是一个字典,可以先用 urllib.parse.urlencode() 编码。

  • headers 参数是一个字典,你可以在构造 Request 时通过 headers 参数传递,也可以通过调用 Request 对象的 add_header() 方法来添加请求头。

  • origin_req_host 指的是请求方的 host 名称或者 IP 地址。

  • unverifiable 指的是这个请求是否是无法验证的,默认是 False 。意思就是说用户没有足够权限来选择接收这个请求的结果

  • method 是一个字符串,它用来指示请求使用的方法,比如 GET , POST , PUT 等等。