学新通技术网

python网络爬虫之urllib库

juejin 4 1
python网络爬虫之urllib库

urllib库

urllib是Python内置的HTTP请求库,它可以看所是URL的组件合集,request就是基于urllib开发的。

四大模块

  • urllib.request:请求模块
  • urllib.error:异常处理模块
  • urllib.parse:URL解析模块
  • urllib.robotparser:robotparser解析模块

爬取一个网页

import urllib.request
# urlopen()打开网页
response = urllib.request.urlopen('http://www.baidu.com')
# read() 读取网页的内容
html = response.read().decode('utf-8')
# .decode()解码,将二进制转换指定编码的字符
print(html)
print(response.getcode()) # 状态码
print(response.info())  # 返回页面的信息

urlopen()方法的参数和用法

urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            *, cafile=None, capath=None, cadefault=False, context=None)
  • url 打开统一资源定位符 url,可以是一个字符串或一个 Request 对象。
  • data:必须是一个对象,用于给定发往服务器的附加数据,若无需此类数据则为 None ,目前 唯一用到 data 的只有 HTTP 请求。支持的对象类型包括字节串、类文件对象和可遍历的类字节串对象。设置data的值后,需要将发送的请求转换成POST请求 对于 HTTP POST 请求方法而言,data 必须符合标准 application/x-www-form-urlencoded 标准格式。 可以使用urllib.parse.urlencode() 函数将自定义的data转换成标准格式接受的参数,参数类型映射对象或二元组序列(键值对类型,二元元组)返回的是一个字符串,作为data的参数,需要将返回的字符串转成字节串(bytes)
  • timeout 为可选参数,用于指定阻塞操作(如连接尝试)的超时时间,单位为秒。如未指定,将使用全局默认超时参数)。本参数实际仅对 HTTP、HTTPS 和 FTP 连接有效。
  • cafile=None, capath=None, cadefault=False, 和CA证书相关,一般不用这几个参数
  • context 参数则必须是一个 ssl.SSLContext 实例,实现SSL加密传输,一般也不用
import urllib.parse
data = bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8'))
# urlopen()打开网页
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read()) 
print("="*50)
response2 = urllib.request.urlopen('http://www.baidu.com',timeout=2) # 超时时间设置为2秒
print(response2.read())

注意response.read()读取以后指针就跑到最后了,所以下一次在读取的时候得到的内容为空。

本文出至:学新通技术网

标签: