Python/Web Page Harvesting

urllib

编辑

urllib等模块的API是为早期时代的互联网所创建的。需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

import urllib.request
f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
result = f.read().decode('utf-8')
 
req = urllib.request.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
r = urllib.request.urlopen(req)
result = f.read().decode('utf-8')

获取网页内容的例子:

import urllib.request as urllib
pageText = urllib.urlopen("http://www.spam.org/eggs.html").read()
print pageText

urllib模块好包括一些设计互联网的工具函数:

  • 函数urlencode把一个字典的键-值对转换为查询字符串用于URL。
  • 函数quote 与 quote_plus 编码正常字符串
  • 函数unquote 与 unquote_plus把url编码的字符串转换为平常文本。

Get 与 post 使用:

import urllib.request as urllib
params = urllib.urlencode({"plato":1, "socrates":10, "sophokles":4, "arkhimedes":11})

# Using GET method
pageText = urllib.urlopen("http://international-philosophy.com/greece?%s" % params).read()
print pageText

# Using POST method
pageText = urllib.urlopen("http://international-philosophy.com/greece", params).read()
print pageText


>>> plain_text = "This isn't suitable for putting in a URL"
>>> print urllib.quote(plain_text)
This%20isn%27t%20suitable%20for%20putting%20in%20a%20URL
>>> print urllib.quote_plus(plain_text)
This+isn%27t+suitable+for+putting+in+a+URL
  • 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‘:‘wklken‘,‘pwd‘:‘123‘}将被转换为”name=wklken&pwd=123″
  • urllib.pathname2url(path) 将本地路径转换成url路径
  • urllib.url2pathname(path) 将url路径转换成本地路径
  • urllib.urlretrieve(url[,filename[,reporthook[,data]]]) 下载远程数据到本地
  • filename:指定保存到本地的路径(若未指定该,urllib生成一个临时文件保存数据)
  • reporthook:回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调
  • data:指post到服务器的数据
  • rulrs = urllib.urlopen(url[,data[,proxies]]) 抓取网页信息,[data]post数据到Url,proxies设置的代理
  • urlrs.readline() 跟文件对象使用一样
  • urlrs.readlines() 跟文件对象使用一样
  • urlrs.fileno() 跟文件对象使用一样
  • urlrs.close() 跟文件对象使用一样
  • urlrs.info() 返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
  • urlrs.getcode() 获取请求返回状态HTTP状态码
  • urlrs.geturl() 返回请求的URL