Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 539|回复: 0

【python】python2.x 与 python3.x区别对照+缩进错误解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-4 11:25:31 | 显示全部楼层 |阅读模式

    仅仅列出我用到的,不全。

     

    划重点:

      1. urllib2 用 urllib.request 代替

      2. urllib.urlencode 用 urllib.parse.urlencode 代替

      3. cookielib 用 http.cookiejar 代替

      4. print " "  用 print(" ") 代替

      5. urllib2.URLError 用 urllib.error.URLError 代替

      6. urllib2.HTTPError 用 urllib.error.HTTPError 代替

      7. except urllib2.URLError, e:  用  except urllib.error.URLError as e: 代替

     

    在python3.4.3自带的IDLE中写代码,经常出现缩进错误,很难查找。

    解决方案:拷贝到Notepad++里面,视图中显示空格和制表符,就可以明显看出问题在哪了。

     

     

    设置了header的网络请求,在Python2.x中的写法

    import urllib  
    import urllib2  
    
    url = 'http://www.server.com/login'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
    values = {'username' : 'kzy',  'password' : '123' }  
    headers = { 'User-Agent' : user_agent }  
    data = urllib.urlencode(values)  
    request = urllib2.Request(url, data, headers)  
    response = urllib2.urlopen(request)  
    page = response.read() 

     

    在Python3.x中的写法

    import urllib.parse
    import urllib.request
    
    url = 'http://www.baidu.com'
    user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36'
    values = {'username':'kzy','password':'123'}
    headers = {'User-Agent':user_agent}
    data = urllib.parse.urlencode(values).encode(encoding='UTF8') #这里要指明编码方式
    request = urllib.request.Request(url, data, headers)
    response = urllib.request.urlopen(request)
    page = response.read()

     

     

    我在学习静觅的爬虫教程,照着把里面的基础部分的代码都写了一遍。

    教程地址:http://cuiqingcai.com/1052.html

     

    里面原本的代码都是2.x的,我全部用3.x学着写了一遍。如下:

    import urllib.parse
    import urllib.request
    
    """
    response = urllib.request.urlopen("http://www.baidu.com")
    print(response.read())
    """
    
    
    """
    #设置了header和data的请求
    
    url = 'http://www.baidu.com'
    user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36'
    values = {'username':'kzy','password':'123'}
    
    headers = {'User-Agent':user_agent}
    
    data = urllib.parse.urlencode(values).encode(encoding='UTF8')
    
    request = urllib.request.Request(url, data, headers)
    response = urllib.request.urlopen(request)
    
    page = response.read()
    """
    
    
    
    """
    #设置代理  避免因为某个IP的访问次数过多导致的禁止访问
    enable_proxy = True
    proxy_handler = urllib.request.ProxyHandler({"http":'http://some-proxy.com:8080'})
    
    null_proxy_handler = urllib.request.ProxyHandler({})
    
    if enable_proxy:
        opener = urllib.request.build_opener(proxy_handler)
    else:
        opener = urllib.request.build_opener(null_proxy_handler)
    
    
    urllib.request.install_opener(opener)    
           
    """
    
    
    """
    
    #设置Timeout
    response = urllib.request.urlopen('http://www.baidu.com', timeout = 10)
    """
    
    
    """
    #使用http的 put或delete方法
    url = 'http://www.baidu.com'
    request = urllib.request.Request(url, data=data)
    request.get_method = lambda:'PUT' #or 'DELETE'
    response = urllib.request.urlopen(request)
    """
    
    
    """
    #使用DebugLog 把收发包的内容在屏幕上打印出来 方便调试
    httpHandler = urllib.request.HTTPHandler(debuglevel=1)
    
    httpsHandler = urllib.request.HTTPSHandler(debuglevel=1)
    opener = urllib.request.build_opener(httpHandler, httpsHandler)
    
    urllib.request.install_opener(opener)
    response = urllib.request.urlopen('https://its.pku.edu.cn/netportal/netportal_UTF-8.jsp', timeout = 5)
    """
    
    
    """
    #URLError异常处理
    
    from urllib.error import URLError, HTTPError
    request = urllib.request.Request('http://www.baidu.com')
    try:
        urllib.request.urlopen(request, timeout = 5)
    except HTTPError as e:
        print('Error code:', e.code)
    except URLError as e:
        
           print('Reason:', e.reason)
    """
    
    
    """
    #URLError异常处理 属性判断
    request = urllib.request.Request('https://its.pku.edu.cn/netportal/netportal_UTF-8.jsp')
    try:
        urllib.request.urlopen(request, timeout = 5)
    except urllib.error.URLError as e:
        if hasattr(e, "code"):     #hasattr 判断变量是否有某个属性
            print(e.code)
        if hasattr(e, "reason"):        
            print(e.reason) 
    else:
        print("OK")
    """
    
    
    """
    #获取cookie保存到变量
    import http.cookiejar
    #声明一个CookieJar对象实例来保存cookie
    cookie = http.cookiejar.CookieJar()
    #利用HTTPCookieProcessor对象来创建cookie处理器
    handler = urllib.request.HTTPCookieProcessor(cookie)
    #通过handler来构建opener
    opener = urllib.request.build_opener(handler)
    #此处的open方法同urlopen
    response = opener.open('https://its.pku.edu.cn/netportal/netportal_UTF-8.jsp')
    for item in cookie:
        print('Name = '+item.name)
        print('Value = '+item.value)
    """
    
    
    """
    
    #获取cookie保存到文件
    
    import http.cookiejar
    
    #设置保存的文件
    
    filename = 'cookie.txt'
    
    #声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
    cookie = http.cookiejar.MozillaCookieJar(filename)
    
    #创建cookie处理器
    
    handler = urllib.request.HTTPCookieProcessor(cookie)
    #构建opener
    
    opener = urllib.request.build_opener(handler)
    
    
    
    response = opener.open("https://its.pku.edu.cn/netportal/netportal_UTF-8.jsp")
    
    #保存到cookie文件
    
    cookie.save(ignore_discard=True,ignore_expires=True)
    """
    
    """
    #从文件中获取cookie并访问
    
    import http.cookiejar
    
    #创建MozillaCookieJar实例对象
    
    cookie = http.cookiejar.MozillaCookieJar()
    
    #从文件中读取cookie内容到变量
    
    cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
    
    #创建请求的request
    req = urllib.request.Request('https://its.pku.edu.cn/netportal/netportal_UTF-8.jsp')
    #创建opener
    
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
    response = opener.open(req)
    print(response.read())
    """
    
    #模拟登陆 登陆不成功 
    import http.cookiejar
    
    filename = 'cookie.txt'
    cookie = http.cookiejar.MozillaCookieJar(filename)
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
    postdata = urllib.parse.urlencode({'stuid':'******','pwd':'******'}).encode(encoding='UTF8') #这里怎么知道名字分别是stuid和pwd呢???
    loginUrl = 'http://xxxxxx.com'
    result = opener.open(loginUrl, postdata)
    cookie.save(ignore_discard=True, ignore_expires=True)
    gradeUrl='http://xxxxxx.com'
    result = opener.open(gradeUrl)
    print(result.read())

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-29 20:55 , Processed in 0.071902 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表