今天改一个小爬虫,从github下载下来运行才发现是python2,那就只能一点一点改成python3了…………
其实2和3还是有好多不同的,我改的时候边改边记,记了不少两者的差别。如果你也知道有其他区别的话,欢迎补充在评论区~
1. From Queue import Queue=> import queue
2. except Exception,e: => except Exception as e:
3. print … => print(…)
4. 常用库
pip install apipkg Appium-Python-Client asn1crypto atomicwrites Automat beautifulsoup4 blessings bpmappers bpython callable certifi cffi chardet chmod Click client colorama comtypes configparser constantly cryptography cssselect curtsies defusedxml diff-match-patch Django django-appconf django-cors-headers django-dajax django-dajaxice django-filter django-import-export django-model-utils django-users2 djangorestframework DjangoUeditor easygui et-xmlfile execnet Flask future gevent glob2 Gooey greenlet gunicorn httpie hyperlink idna image importlib-metadata incremental itchat itsdangerous jdcal Jinja2 locustio lxml Mako Markdown MarkupSafe more-itertools msgpack mysql-connector mysql-connector-python mysqlclient numpy odfpy openpyxl packaging pamqp pandas parse parse-type parsel pathlib peewee pika Pillow pip pluggy protobuf psutil public py pyasn1 pyasn1-modules pycket pycparser PyDispatcher Pygments PyHamcrest pymongo PyMySQL pyOpenSSL pyparsing pypng Pypubsub PyQRCode pytesseract pytest pytest-base-url pytest-bdd pytest-forked pytest-html pytest-metadata pytest-ordering pytest-rerunfailures pytest-selenium pytest-timeout pytest-variables pytest-xdist python-dateutil pytz pywifi PyYAML pyzmq qrcode queuelib rabbitpy redis requests runcmd Scrapy selenium Serialize serializers service-identity setuptools sh simplejson six soupsieve South SQLAlchemy tablib test tornado torndb Twisted typing unicodecsv urllib3 utils uwsgitop w3lib wcwidth Werkzeug wheel wxpy wxPython xlrd xlwt you-get zipp zope.interface
5. 在python2中,reload()是内置函数,能够直接使用。
但是在python3中,直接使用reload()会报错,需要从imp中导入。
from imp import reload
reload()
6. Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding
基于python3.6.1版本,在一个.py文件中,加入这3行:
import requests, re, sys
reload(sys)
sys.setdefaultencoding("utf-8")
出现这样的错误:
sys.setdefaultencoding("utf-8")
AttributeError: module 'sys' has no attribute 'setdefaultencoding'
因为Python3字符串默认编码unicode, 所以sys.setdefaultencoding也不存在了。去掉sys.setdefaultencoding
7. Import urllib Urllib.quote()=>import urllib.parse urllib.parse.quote()
8. python3报错
print("Response:", resp.text.decode('unicode_escape'))
=>print("Response:", resp.text.encode('utf-8').decode('unicode_escape'))
中间加上.encode('utf-8')即可。
因为python3里面,字符串要先encode手动指定其为某一编码的字节码之后,才能decode解码。