当前位置:博客首页 > Python > 正文

第15课 urllib库的使用

作者: Jarvan 分类: Python 发布时间: 2019-05-31 09:59 百度已收录

一、urllib包

Python官方文档地址:
https://docs.python.org/3.6/library/urllib.html

– request模块:打开和读取url的
– error模块:包含了request模块抛出的异常
– parse模块:解析url的
– robotparser模块:解析robots.txt文件的

request模块

  • urllib.request.urlopen(url, data=None, [timeout, ]*,
    cafile=None, capath=None, cadefault=False, context=None)
  • 参数:
    • url:可以是一个字符串(url连接)也可以是一个Request对象
    • data: 发送给服务器的数据
    • timeout: 连接超时,时间单位是秒

class urllib.request.Request(url, data=None, headers={},
origin_req_host=None, unverifiable=False, method=None)
– 返回一个Request对象,能够作为urlopen的第一个参数
– url就是要请求的url连接,是一个合法的字符串
– data post请求的时候要发送的数据
– headers 是一个字典,用于构造自定义的请求头
– origin_req_host 请求的host主域
– unverifiable 是否验证HTTPS
– method 请求方法

# 以下是一个简单的爬虫,利用urllib库中的reques模块(Request、urlopen)

# -*- coding: utf-8 -*-
from urllib import request, error
from socket import timeout


def download(url, encoding='utf-8', delay = 3, retry=3):
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

    try:
        req = request.Request(url, headers=header)
        resp = request.urlopen(req, timeout=delay)
    except (error.HTTPError, error.URLError, timeout) as err:
        print("错误类型:", err)
        html = None
        if rery > 0:
            return download(url, retry=retry - 1)
    else:
        html = resp.read().decode(encoding)
    return html


if __name__ == '__main__':
    url = "http://www.haoduanzi.com/"
    source = download(url)
    print(source)

发表评论