首页 技术 正文
技术 2022年11月15日
0 收藏 463 点赞 3,398 浏览 4973 个字

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

划重点:

  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' : '' }
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.requesturl = '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':''}
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)
#构建openeropener = 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')
#创建openeropener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
response = opener.open(req)
print(response.read())
"""#模拟登陆 登陆不成功
import http.cookiejarfilename = '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())
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,817
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,900