当前位置 主页 > 网站技术 > 代码类 >

    Python爬虫之urllib基础用法教程

    栏目:代码类 时间:2019-11-01 09:02

    综述

    本系列文档用于对Python爬虫技术进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。

    Python 版本是3.7.4

    urllib库介绍

    它是 Python 内置的HTTP请求库,也就是说我们不需要额外安装即可使用,它包含四个模块(主要对前三个模块进行学习):

    request : 它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。 error : 异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。 parse : 用于解析URL,提供了许多URL处理方法,比如拆分、解析、合并等等的方法,以及对参数的拼接等待。 robotparser : 主要是用来识别网站的robots.txt协议文件,然后判断网站的那些数据可以爬,哪些数据不可以爬的,其实用的比较少。

    urllib.request 介绍

    urlopen()

    1.参数说明(仅写了四个最常用的参数)

    url : 爬取目标的URL;
    data : 请求参数,如果设置该参数,则请求默认为post请求;没有默认为get请求;
    timeout : 用于设置超时时间,单位为秒;
    context : 必须是一个ssl.SSLContext类型,用来指定SSL设置,忽略未认证的CA证书;

    2.具体用法

    GET 请求方式

    # 导入urllib库
    import urllib.request
     
     # 向指定的url发送请求,并返回服务器响应的类文件对象
     url = "http://www.baidu.com"
     response = urllib.request.urlopen(url=url)
     print(type(response))
     
     # 类文件对象支持文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
     html = response.read()
     # html = response.readline() # 读取一行
     # html = response.readlines() # 读取多行,返回列表
     # 打印响应结果(byte类型)
     print(html)
     # 打印响应结果(utf-8类型)
     # 二进制和字符串之间的相互转码使用 encode() 和 decode() 函数
     # encode() 和 decode() 可带参数,不写默认utf-8,其他不再特别说明
     print(html.decode())
     # 打印状态码
     # print(response.get_code())
     print(response.status)
     # 获取响应头
     print(response.getheaders())
     # 获取响应头Server信息
     print(response.getheader('Server'))
     # 获取响应结果原因
     print(response.reason)

    POST 请求方式

    # 导入urllib库
    import urllib.parse
    import urllib.request
     
     # 向指定的url发送请求,并返回
     post_url = 'https://fanyi.baidu.com/sug'
     # 传入参数
     form_data = {
     'kw': 'honey'
     }
     # 格式化参数
     form_data = urllib.parse.urlencode(form_data).encode()
     
     response = urllib.request.urlopen(url=post_url, data=form_data)
     # 打印服务器响应的类文件对象
     print(type(response))
     
     # 类文件对象支持文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
     html = response.read()
     # 打印响应结果(byte类型)
     print(html)
     # 打印响应结果(utf-8类型)
     print(html.decode())
     # 打印状态码
     print(response.status)
     # print(response.getcode())
     # 获取响应头
     print(response.getheaders())
     # 获取响应头Server信息
     print(response.getheader('Server'))
     # 获取响应结果原因
     print(response.reason)

    urlretrleve()

    1.参数说明

    url : 下载链接地址;
    filename : 指定保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据);