Python爬虫核心知识-第二章:2.1 爬虫urllib.request请求模块

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YWo5p2R5pyA5aW95o2J55qE576K,size_20,color_FFFFFF,t_70,g_se,x_16

 

 Python爬虫核心知识

第二章:2.1 爬虫urllib.request请求模块

2.1 urllib.request 模块

        urllib是python3自带的标准库,无需安装,直接imort导入即可。这个模块主要负责打开URL和HTTP协议之类。

        由于urllib在不同的Python版本中都有明显的区别,在实际开发中也经常遇到不同版本之间互不兼容的情况。

        在Python3中,urllib大致具备以下功能:

        1、urllib.request:用于打开和读取URL

        2、urllib.parse:用于解析URL

        3、urllib.err:用于接收urllib.request产生的错误信息

        4、urllib.bobotparser: 用于解析robots.txt文件(爬虫的君子协议)

urllib — URL handling modules — Python 3.10.4 documentation

完整的用法可以参考该模块的官方文档

2.1.1 urllib.request 请求 

        urllib.request最简单的用法就是urllib.request.urlopen,函数的语法如下:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

        功能说明:Urllib是用于访问URL(请求链接)的唯一方法。

      「参数解释」

  • URL:需要访问的网站的请求链接地址。url的格式必须完整。
  • import urllib.request
    
    response = urllib.request.urlopen('https://www.baidu.com')
    print(response.read().decode('utf8'))
    

    返回值response:urlopen返回的response对象是http.client.HTTPResponse类型,主要包含read()、readinfo()、getheader(name)、getheaders()、fileno()等方法。

  • data:urllib会判断data参数是否为None从而区分请求方式。默认值None,代表请求方式为GET,反之请求方式为POST。参数data的数据由字典类型转换成字节类型才能完成POST请求!
    • GET 特点 :查询参数在URL地址中显示
    • POST
      • 在Request方法中添加data参数 urllib.request.Request(url,data=data,headers=headers)
      • data :表单数据以bytes类型提交,不能是str
  • import urllib.parse
    import urllib.request
    
    data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
    response = urllib.request.urlopen('http://httpbin.org/post', data=data)
    print(response.read().decode('utf8'))
    
  • timeout:指定请求时间的超时设置,单位为秒。如果不指定,那就执行全局默认的超时设置。若请求超时,则会抛出urllib.error.URLError异常,可以通过try except处理异常。
  • import socket
    import urllib.request
    import urllib.error
    
    try:
    	response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
    except urllib.error.URLError as e:
    	if isinstance(e.reason, socket.timeout):
    		print('TIME OUT')
    
  • 其他参数:
    • context参数必须是ssl.SSLContent类型,用来指定设置SSL。
      cafile和capath分别指定CA证书和它的路径,在HTTPS中有用。
      cadefault已经弃用,默认default。

        在实际应用中,常用的参数有url、data、timeout。对网站发送请求时,网站会返回相应的相应内容,返回的是一个对象。通常会对这个返回的对象使用下列方案解析数据: 

  • read()  读取服务器响应的内容
  • getcode() 返回HTTP的响应码
  • geturl()  返回实际数据的URL(防止重定向问题)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全村最好捉的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值