• python urllib.request模块


    python的urllib模块提供了一系列操作url的功能,可以让我们通过url打开任意资源。其中比较常用的就是request模块,本篇主要介绍requset模块。

    urllib子模块

    • urllib.request 打开或请求url

    • urllib.error 捕获处理请求时产生的异常

    • urllib.parse 解析url

    • urllib.robotparser 用于解析robots.txt文件

    robots.txt是一种存放于网站根目录下文本文件,用来告诉网络爬虫服务器上的那些文件可以被查看。又被成为robots协议,是一种约定俗成的协议。

    request模块

    function request.urlopen()

    urlopen方法用来打开资源url,常用带参数形式urlopen(url,data=None),url:资源url,data:携带的数据。

    方法的返回值始终为一个对象,并可以调用相应的方法获取返回的信息。其中对于http及https的url来说会返回一个http.client.HTTPResponse对象;

    
    import urllib.request
    # 我们用本地的一个简单html文件来测试
    url = 'http://127.0.0.1:8848/chenjy/test.html'
    
    req = urllib.request.urlopen(url)
    
    print(req)
    
    

    1. read() 返回服务器返回的原始数据;

    
    import urllib.request
    
    url ='http://127.0.0.1:8848/chenjy/test.html'
    
    req = urllib.request.urlopen(url)
    
    print(req.read())
    
    

    • 我们可以再调用decode()方法来解码。
    
    import urllib.request
    
    url = 'http://127.0.0.1:8848/chenjy/test.html'
    
    req = urllib.request.urlopen(url)
    
    print(req.read().decode())
    
    

    2.geturl() 返回获取资源的url;

    • 创建一个测试页
    
    import urllib.request
    url = 'http://127.0.0.1:8848/chenjy/test.html' 
    
    req = urllib.request.urlopen(url)
    
    print(req.geturl())
    
    

    • 前端重定向

    我们在页面中添加js脚本重定向页面window.location.href='http://127.0.0.1:8848/chenjy/test2.html';,会发现访问的时候会重定向到test2,但是geturl还是获取的重定向前的

    • 后端重定向

    我们启动一个项目并添加一个拦截器当访问index.html的时候重定向到/ls/html/list.html页面,geturl获取的是重定向后的页面

    
    @Override
        	        public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
        	            int index = target.lastIndexOf("index.html");
        	    	    if (index != -1){
            	        	HandlerKit.redirect("/ls/html/list.html",request,response,isHandled);
        	    	    }
        	            
        	        }
    
    
    
    import urllib.request
    url = 'http://localhost:8088/ls/index.html'
    
    req = urllib.request.urlopen(url)
    
    print(req.geturl())
    
    

    3.info() 返回页面的元信息;

    
    import urllib.request
    url = 'http://127.0.0.1:8848/chenjy/test.html'
    
    req = urllib.request.urlopen(url)
    
    print(req.info())
    
    

    4.getcode() 返回页面的状态码;

    
    import urllib.request
    url = 'http://127.0.0.1:8848/chenjy/test.html'
    
    req = urllib.request.urlopen(url)
    
    print(req.getcode())
    
    

    class request.Request

    url请求类 Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    • url:请求url

    • data:请求传参;bytes字节流

    • headers:请求头

    • origin_req_host:请求原始主机;不带端口

    • unverifiable:是否不可验证;

    • method :请求方法;如GET、POST、PUT等

    
    import urllib.request
    
    # 模拟iphone5请求百度手机版页面
    url = 'https://www.baidu.com/'
    
    user_agent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1'
    headers = {
        'User-Agent': user_agent
    }
    
    # 抓取page信息
    req = urllib.request.Request(url, headers=headers,method='GET')
    page = urllib.request.urlopen(req).read().decode('utf-8')
    
    print(page)
    
    

  • 相关阅读:
    如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法
    The error may exist in com/bjpowernode/dao/StudentDao.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderExcept
    一个简单jpa例子
    @PathVariable
    java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决
    yml中driver-class-name: com.mysql.jdbc.Driver 解析不到的问题
    docker 操作镜像的基本操作
    Navicat 远程连接Docker容器中的mysql 报错:1251
    spring boot中常用的配置文件的重写
    MVC最全jar包
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/11743847.html
Copyright © 2020-2023  润新知