扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
最新版的python3.3.0已经发布了。相较于python3.0,3.2的改动并不大。但网上的大量的教程等大都以2.x版本为基础。这为想要从python3.0学起的菜鸟带来了不少的困难。 作为一只菜鸟,最近想学习一下python中urllib模块的使用方法。从网上找的最简单的实例:把google 首页的html抓取下来并显示在控制台上 代码:
创新互联是一家专注于成都网站设计、网站制作与策划设计,长兴网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:长兴等地区。长兴做网站价格咨询:18980820575
[python] view plain copy
import urllib
print urllib.urlopen('').read()
首先,使用过python3.0的朋友都知道,print已经变成含树了,需要括号。但这不是主要问题。问题是控制台显示错误,说urllib模块中没有urlopen方法。 奇怪了,网上的教程能错了?又尝试help(urllib),发现什么方法都没有,只提供了package contents,里面有5个名字。
[python] view plain copy
import urllib
help(urllib)
3.0版本中已经将urllib2、urlparse、和robotparser并入了urllib中,并且修改urllib模块,其中包含5个子模块,即是help()中看到的那五个名字。
为了今后使用方便,在此将每个包中包含的方法列举如下:
urllib.error: ContentTooShortError; HTTPError; URLError
urllib.parse: parseqs; parseqsl; quote; quotefrombytes; quote_plus; unquote unquoteplus; unquoteto_bytes; urldefrag; urlencode; urljoin; urlparse; urlsplit; urlunparse; urlunsplit
urllib.request: AbstractBasicAuthHandler; AbstractDigestAuthHandler; BaseHandler; CatheFTPHandler; FTPHandler; FancyURLopener; FileHandler; HTTPBasicAuthHandler; HTTPCookieProcessor; HTTPDefaultErrorHandler; HTTPDigestAuthHandler; HTTPErrorProcessorl; HTTPHandler; HTTPPasswordMgr; HTTPPasswordMgrWithDefaultRealm; HTTPRedirectHandler; HTTPSHandler;OpenerDirector;ProxyBasicAuthHandler ProxyDigestAuthHandler; ProxyHandler; Request; URLopener; UnknowHandler; buildopener; getproxies; installopener; pathname2url; url2pathname; urlcleanup;urlopen; urlretrieve;
urllib.response: addbase; addclosehook; addinfo; addinfourl;
urllib.robotparser: RobotFileParser
---------------------------------------------------------------------------------------------------------
在2.X版本下,打开HTML文档的实例:
[python] view plain copy
import urllib
webURL = ""
localURL = "index.html"
#通过URL打开远程页面
u = urllib.urlopen(webURL)
buffer = u.read()
print u.info()
print "从%s读取了%d 字节数据. " % (u.geturl(),len(buffer) )
#通过URL打开本地页面
u = urllib.urlopen(localURL)
buffer = u.read()
print u.info()
print "从%s读取了%d 字节数据. " % (u.geturl(),len(buffer) )
运行结果如下:
[html] view plain copy
Date: Fri, 26 Jun 2009 10:22:11 GMT
Server: Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Python/2.5.2
Last-Modified: Thu, 25 Jun 2009 09:44:54 GMT
ETag: "105800d-46e7-46d29136f7180"
Accept-Ranges: bytes
Content-Length: 18151
Connection: close
Content-Type: text/html
从读取了18151 字节数据.
Content-Type: text/html
Content-Length: 865
Last-modified: Fri, 26 Jun 2009 10:16:10 GMT
从index.html读取了865 字节数据.
若要通过urllib模块中的urlopen(url [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。函数urlopen不仅可以打开位于远程web服务器上的文件,而 且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。
一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读操作。若要读取整个HTML文档的内容的话,您可以使用read()函数,该函数将文件内容作为字符串返回。
打开一个地址之后,您可以使用geturl()函数取得被获取网页的真正的URL。这是很有用的,因为urlopen(或使用的opener对象)也许会伴随一个重定向。获取的网页URL也许和要求的网页URL不一样。
另一个常用的函数是位于从urlopen返回的类文件对象中的info()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。
--------------------------------------------------------------------------------------------------------------------------
在2.X版本下,urlparse使用实例:
[python] view plain copy
import urlparse
URLscheme = "http"
URLlocation = ""
URLpath = "lib/module-urlparse.html"
modList = ("urllib", "urllib2", \
"httplib", "cgilib")
#将地址解析成组件
print "用Google搜索python时地址栏中URL的解析结果"
parsedTuple = urlparse.urlparse(
"?
hl=enq=pythonbtnG=Google+Search")
print parsedTuple
#将组件反解析成URL
print "\反解析python文档页面的URL"
unparsedURL = urlparse.urlunparse( \
(URLscheme, URLlocation, URLpath, '', '', ''))
print "\t" + unparsedURL
#将路径和新文件组成一个新的URL
print " 利用拼接方式添加更多python文档页面的URL"
for mod in modList:
newURL = urlparse.urljoin(unparsedURL, \
"module-%s.html" % (mod))
print "\t" + newURL
#通过为路径添加一个子路径来组成一个新的URL
print " 通过拼接子路径来生成Python文档页面的URL"
newURL = urlparse.urljoin(unparsedURL,
"module-urllib2/request-objects.html")
print "\t" + newURL
运行结果如下:
[python] view plain copy
用Google搜索python时地址栏中URL的解析结果
('http', '', '/search', '',
'hl=enq=pythonbtnG=Google+Search', '')
反解析python文档页面的URL
利用拼接方式添加更多python文档页面的URL
通过拼接子路径来生成Python文档页面的URL
python没有类似inet_addr函数的,python函数列表查询后证实没有该类似的函数
在python中可以用id()函数获取对象的内存地址。
#例如:
object = 1 + 2
print(id(object)) #4304947776
getUrl(html)函数: 从参数html中查找 "thumb":\\xxxxx形式的字符串,返回xxxx这串字符串,这xxx中包含了jpg的url。
findReplaceStr(url)函数: 查找参数url的.jpg前字符串,即图片名称,返回这个名称的字符串。
getBigImageUrl(url,replaceStr)函数: 处理参数url,把图片地址用参数replaceStr替换为正确的解析地址newurl,并返回这个newurl。
这几个函数通篇没有用到什么base64解码,只使用了正则表达式re模块,你是不是搞错了?
最近在工作中需要将url的host和path路径分开存储,python内置的 urlparse , 支持我们优雅的解决这个问题, 参考地址
由上文我们可以看到,url被拆分的很细致,提取的方法也很简单,只需要给属性取一个别名,后面跟上解析的key,即可匹配出解析文本。
import socket
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
print ip
这就是本机的IP地址
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Copyright © 2002-2023 www.kswjz.com 快上网建站品牌 QQ:244261566 版权所有 备案号:蜀ICP备19037934号
微信二维码
移动版官网