python访问web网页_python网络编程(六)---web客户端访问

1.获取web页面

urllib2 支持任何协议的工作---不仅仅是http,还包括FTP,Gopher。

1 importurllib22 req=urllib2.Request('http://www.baidu.com') #第一件事,建立urllib2.Request对象,注意http别掉了

3 fd =urllib2.urlopen(req)4 while 1:5 data =fd.read(50000) #限制读取的字符

6 if notlen(data):7 break

8 print data

2.urllib,urllib2,httplib的介绍

urllib模块

1)urllib.urlopen(url[, data[, proxies]]) :

本函数创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址。

read(), readline(), readlines(), fileno(), close():这些方法的使用方式与文件对象完全一样;

info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息;

getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;

geturl():返回请求的url。

1 #! /usr/bin/env python

2 #coding=utf-8

3 importurllib4 content=urllib.urlopen("http://www.baidu.com")5 print "http header:",content.info()6 print "http status:",content.getcode()7 print "url:",content.geturl()8 print "content:"

9 for line incontent.readlines():10 print line

2)urllib.urlretrieve(url[, filename[, reporthook[, data]]]):

urlretrieve方法直接将远程数据下载到本地。

参数url是要下载的url地址。

参数filename指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);

参数reporthook是一个 回调函数,当连接上服务器、以及相应的数据 块传输完毕的时候会触发该回调(即每下载一块就调用一次回调函数)。我们可以利用这个回调函 数来显示当前的下载进度,也可以用于限速,下面的例子会展示。

参数data指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径, header表示服务器的响应头。

1 """下载文件,并显示下载进度"""

2 importurllib3

4 defDownCall(count,size,total_filesize):5 """count为已下载数据块个数,size为数据块的大小,total_filesize为文件总大小"""

6 per=100.0*count*size/total_filesize7 if per>100:8 per=100

9 print "Already download %d KB(%.2f" %(count*size/1024,per)+"%)"

10

11 url="http://rodrigob.github.io/documents/2012_cvpr_pedestrian_detection_at_100_frames_per_second.pdf"

12 localfilepath=r"E:\pythonCode\download.pdf"

13 urllib.urlretrieve(url,localfilepath,DownCall)

urllib中还提供了一些辅助方法,用于对url进行编码、解码。url中是不能出现一些特殊的符号的,有些符号有特殊的用途。我们知道以get方式提交数据的时候,会在url中添加key=value这样的字符串,所以在value中是不允许有'=',因此要对其进行编码;与此同时服务器接收到这些参数的时候,要进行解码,还原成原始的数据。这个时候,这些辅助方法会很有用:

urllib.quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符;

urllib.unquote(string) :对字符串进行解码;

urllib.quote_plus(string[, safe]) :与urllib.quote类似,但这个方法用'+'来替换' ',而quote用'%20'来代替' '

urllib.unquote_plus(string) :对字符串进行解码;

urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如 字典{'name': 'dark-bull', 'age': 200}将被转换为"name=dark-bull&age=200"

urllib.pathname2url(path):将本地路径转换成url路径;

urllib.url2pathname(path):将url路径转换成本地路径;

urllib2模块

使用Python访问网页主要有三种方式: urllib, urllib2, httplib

urllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session

(1)最简单的页面访问

res=urllib2.urlopen(url)

print res.read()

(2)加上要get或post的数据

data={"name":"hank", "passwd":"hjz"}

urllib2.urlopen(url, urllib.urlencode(data))

(3)加上http头

header={"User-Agent": "Mozilla-Firefox5.0"}

urllib2.urlopen(url, urllib.urlencode(data), header)

使用opener和handler

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

(4)加上session

cj = cookielib.CookieJar()

cjhandler=urllib2.HTTPCookieProcessor(cj)

opener = urllib2.build_opener(cjhandler)

urllib2.install_opener(opener)

(5)加上Basic认证

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

top_level_url = "http://www.163.com/"

password_mgr.add_password(None, top_level_url, username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

(6) 使用代理

proxy_support = urllib2.ProxyHandler({"http":"http://1.2.3.4:3128/"})

opener = urllib2.build_opener(proxy_support)

urllib2.install_opener(opener)

(7) 设置超时

socket.setdefaulttimeout(5)

Httplib模块

httplib 是 python中http 协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互。httplib的内容不是很多,也比较简单。以下是一个非常简单的例子,使用httplib获取163首页的html:

1 importhttplib2 conn = httplib.HTTPConnection("www.qq.com")3 conn.request('get', '/')4 printconn.getresponse().read()5 conn.close()

下面详细介绍httplib提供的常用类型和方法。

httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )

HTTPConnection类的构造函数,表示一次与服务器之间的交互,即请求/响应。参数host表示服务器主机,如:www.csdn.net;port为端口号,默认值为80; 参数strict的 默认值为false, 表示在无法解析服务器返回的状态行时( status line) (比较典型的状态行如: HTTP/1.0 200 OK ),是否抛BadStatusLine 异常;可选参数timeout 表示超时时间。

HTTPConnection提供的方法:

HTTPConnection.request ( method , url [ , body [ , headers ]] )

调用request 方法会向服务器发送一次请求,method 表示请求的方法,常用有方法有get 和post ;url 表示请求的资源的url ;body 表示提交到服务器的数据,必须是字符串(如果method 是"post" ,则可以把body 理解为html 表单中的数据);headers 表示请求的http 头。

HTTPConnection.getresponse ()

获取Http 响应。返回的对象是HTTPResponse 的实例。

HTTPConnection.connect ()

连接到Http 服务器。

HTTPConnection.close ()

关闭与服务器的连接。

随机附赠一张美图:嘿嘿

示例可以参考:http://www.cnblogs.com/xiaowuyi/archive/2012/05/21/2511428.html

#coding:utf-8 import time import webbrowser as web import os import random #随机选择一个浏览器打开网页 def open_url_use_random_browser(): #定义要访问的地址 url='http://www.baidu.com' #定义浏览器路径 browser_paths=[r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe', #r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', #r'C:\Program Files (x86)\Opera\launcher.exe', #r'C:\Users\Administrator\AppData\Roaming\qianying\qianying.exe', #r'C:\Users\Administrator\AppData\Local\115Chrome\Application\115chrome.exe', #r'C:\Program Files (x86)\Internet Explorer\iexplore.exe', #r'D:\Program Files(x86)\SouExplorer\SogouExplorer\SogouExplorer.exe' ] #选择一个浏览器 def chose_a_browser_open_url(browser_path,url): #如果传入的浏览器位置不存在,使用默认的浏览器打开 if not browser_path: print ('using default browser to open') web.open_new_tab(url)#使用默认浏览器,就不再结束进程 else: #判断浏览器路径是否存在 if not os.path.exists(browser_path): print ('current browser path not exists,using default browser') #浏览器位置不存在就使用默认的浏览器打开 browser_path='' chose_a_browser_open_url(chose_a_browser_open_url,url) else: browser_task_name=browser_path.split('\\')[-1]#结束任务的名字 browser_name=browser_task_name.split('.')[0]#自定义的浏览器代号 print (browser_name) web.register(browser_name, None,web.BackgroundBrowser(browser_path)) web.get(browser_name).open_new_tab(url)#使用新注册的浏览器打开网页 print ('using %s browser open url successful' % browser_name) time.sleep(5)#等待打开浏览器 # kill_cmd='taskkill /f /IM '+browser_task_name#拼接结束浏览器进程的命令 # os.system(kill_cmd) #终结浏览器 browser_path=random.choice(browser_paths)#随机从浏览器中选择一个路径 chose_a_browser_open_url(browser_path,url) if __name__ == '__main__': print (''''' ***************************************** ** Welcome to python of browser ** ** Created on 2019-04-28 ** ** @author: Louise_ZOU ** ***************************************** ''') open_url_use_random_browser()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值