我是今年准备进入金蝶专业版移动应用用开发专业的,想去北京的大学听课

用HTMLParser提取URL页面超链接的一段代码(小试牛刀) - nhy520 - ITeye技术网站
博客分类:
用HTMLParser提取URL页面超链接的一段代码(小试牛刀)
packageimport java.util.HashMimport java.util.Mimport org.htmlparser.Nimport org.htmlparser.NodeFimport org.htmlparser.Pimport org.htmlparser.tags.LinkTimport org.htmlparser.util.NodeLpublic class GetLinkTest{
public static void main(String[] args)
// 通过过滤器过滤出&A&标签
Parser parser = new Parser("http://");
NodeList nodeList = parser
.extractAllNodesThatMatch(new NodeFilter()
// 实现该方法,用以过滤标签
public boolean accept(Node node)
if (node instanceof LinkTag)// 标记
return true;
return false;
for (int i = 0; i & nodeList.size(); i++)
LinkTag n = (LinkTag) nodeList.elementAt(i);
System.out.print(n.getStringText() + " ==&& ");
System.out.println(n.extractLink());
catch (Exception e)
e.printStackTrace();
输出结果:图片 ==&& [url]/imghp?hl=zh-CN&tab=wi[/url]地图 ==&& [url]/maps?hl=zh-CN&tab=wl[/url]资讯 ==&& [url]/nwshp?hl=zh-CN&tab=wn[/url]视频 ==&& [url]/?hl=zh-CN&tab=wv[/url]财经 ==&& [url]/finance?hl=zh-CN&tab=we[/url]&u style=height:22vertical-align:top&更多&/u& &small&&#9660;&/small& ==&& [url]/intl/zh-CN/options/[/url]博客 ==&& [url]/?hl=zh-CN&tab=wb[/url]生活 ==&& [url]/shenghuo/?hl=zh-CN&tab=w8[/url]热榜 ==&& [url]/rebang/home?hl=zh-CN&tab=w9[/url]网站导航 ==&& [url]/?hl=zh-CN&tab=wA[/url]日历 ==&& [url]/calendar/render?hl=zh-CN&tab=wc[/url]照片 ==&& [url]/home?hl=zh-CN&tab=wq[/url]文档 ==&& [url]/?hl=zh-CN&tab=wo[/url]协作平台 ==&& [url]/?hl=zh-CN&tab=w3[/url]输入法 ==&& [url]/pinyin/?hl=zh-CN&tab=wI[/url]工具栏 ==&& [url]/?hl=zh-CN&tab=wO[/url]软件精选 ==&& [url]/?hl=zh-CN&tab=wP[/url]更多 & ==&& [url]/intl/zh-CN/options/[/url]个性化主页 ==&& [url]/url?sa=p&pref=ig&pval=3&q=/ig/china%3Fhl%3Dzh-CN%26source%3Diglk&usg=AFQjCNGNYfgta9G_BNut0SFGzavY4Y2pjQ[/url]登录 ==&& [url]/accounts/Login?continue=/&hl=zh-CN[/url]高级搜索 ==&& [url]/advanced_search?hl=zh-CN[/url]使用偏好 ==&& [url]/preferences?hl=zh-CN[/url]语言工具 ==&& [url]/language_tools?hl=zh-CN[/url]广告计划 ==&& [url]/intl/zh-CN/ads/[/url]Google 大全 ==&& [url]/intl/zh-CN/about.html[/url]< in English ==&& [url]/ncr[/url]隐私权 ==&& [url]/intl/zh-CN/privacy.html[/url]
浏览: 618827 次
来自: 北京
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
Spring太强大了。
he 写道请问java用memcache主 ...
这样真的可以解决吗?为什么我使用你的代码:ImageIO.re ...5443人阅读
H3_NUTCH(19)
关于HtmpParser的基本内容请见
本文示例用于提取HTML文件中的链接
package org.ljh.search.
import java.util.HashS
import java.util.S
import org.htmlparser.N
import org.htmlparser.NodeF
import org.htmlparser.P
import org.htmlparser.filters.NodeClassF
import org.htmlparser.filters.OrF
import org.htmlparser.tags.LinkT
import org.htmlparser.util.NodeL
import org.htmlparser.util.ParserE
//本类创建用于HTML文件解释工具
public class HtmlParserTool {
// 本方法用于提取某个html文档中内嵌的链接
public static Set&String& extractLinks(String url, LinkFilter filter) {
Set&String& links = new HashSet&String&();
// 1、构造一个Parser,并设置相关的属性
Parser parser = new Parser(url);
parser.setEncoding(&gb2312&);
// 2.1、自定义一个Filter,用于过滤&Frame &标签,然后取得标签中的src属性值
NodeFilter frameNodeFilter = new NodeFilter() {
public boolean accept(Node node) {
if (node.getText().startsWith(&frame src=&)) {
//2.2、创建第二个Filter,过滤&a&标签
NodeFilter aNodeFilter = new NodeClassFilter(LinkTag.class);
//2.3、净土上述2个Filter形成一个组合逻辑Filter。
OrFilter linkFilter = new OrFilter(frameNodeFilter, aNodeFilter);
//3、使用parser根据filter来取得所有符合条件的节点
NodeList nodeList = parser.extractAllNodesThatMatch(linkFilter);
//4、对取得的Node进行处理
for(int i = 0; i&nodeList.size();i++){
Node node = nodeList.elementAt(i);
String linkURL = &&;
//如果链接类型为&a /&
if(node instanceof LinkTag){
LinkTag link = (LinkTag)
linkURL= link.getLink();
//如果类型为&frame /&
String nodeText = node.getText();
int beginPosition = nodeText.indexOf(&src=&);
nodeText = nodeText.substring(beginPosition);
int endPosition = nodeText.indexOf(& &);
if(endPosition == -1){
endPosition = nodeText.indexOf(&&&);
linkURL = nodeText.substring(5, endPosition - 1);
//判断是否属于本次搜索范围的url
if(filter.accept(linkURL)){
links.add(linkURL);
} catch (ParserException e) {
e.printStackTrace();
程序中的一些说明:
(1)通过Node#getText()取得节点的String。
(2)node instanceof TagLink,即&a/&节点,其它还有很多的类&#20284;节点,如tableTag等,基本上每个常见的html标签均会对应一个tag。官方文档说明如下:
The nodes package has the concrete node implementations.
The tags package contains specific tags.
因此可以通过此方法直接判断一个节点是否某个标签内容。
其中用到的LinkFilter接口定义如下:
package org.ljh.search.
//本接口所定义的过滤器,用于判断url是否属于本次搜索范围。
public interface LinkFilter {
public boolean accept(String url);
测试程序如下:
package org.ljh.search.
import java.util.I
import java.util.S
import org.junit.T
public class HtmlParserToolTest {
public void testExtractLinks() {
String url = &&;
LinkFilter linkFilter = new LinkFilter(){
public boolean accept(String url) {
if(url.contains(&baidu&)){
Set&String& urlSet = HtmlParserTool.extractLinks(url, linkFilter);
Iterator&String& it = urlSet.iterator();
while(it.hasNext()){
System.out.println(it.next());
输出结果如下:
/v?ct=&rn=20&pn=0&db=0&s=25&word=
/gaoji/preferences.html
/search?fr=ps&key=
/i?tn=baiduimage&ct=&lm=-1&cl=2&nc=1&word=
/baidusearch/mobisearch.html?ref=pcjg&from=1000139w
/ns?cl=2&rn=20&tn=news&word=
/v2/?login&tpl=mn&u=http%3A%2F%%2F
/cache/sethelp/index.html
/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt
/f?kw=&fr=wwwt
/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%%2F
/?refer=888
/search?word=&lm=0&od=0
/m?word=&fr=ps01000
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1057205次
积分:10669
积分:10669
排名:第1174名
原创:194篇
转载:77篇
评论:100条
(1)(3)(1)(10)(16)(16)(11)(3)(21)(27)(26)(23)(6)(2)(17)(21)(7)(6)(3)(5)(2)(36)(1)(1)(6)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
import java.util.regex.Ppublic class testRegularExp{ public static void findURLs(String s){
String regex="&[aA]\\s.*?href=[\"\'\\s]*([^\"\'\\s]+)[\"\'\\s]*[^&]*&";
Pattern pile(regex);
Matcher mt=pt.matcher(s);
while(mt.find()){
System.out.println("链接:"+mt.group(0));
System.out.println("链接地址:"+mt.group(1));
System.out.println("链接文字:"+mt.group(2));
} }& & public static void main(String[] args)& & {& & & &&& & & & & String s="&a id=\"mvclicka\" href=\"http://show./c?type=2&oimpid=faydxTT_zAW4&pub=107_&cus=9_4_0&fee=4gWeJG-UUUJR&pinfo=&ref=//shymmy_QHU_.html?tclick=http%3A%2F%2Fc.%2Flclick%3Fseq%3D46%26loc%3DQQ_HP_Upright%26aver%3D0%26soid%3D9E80D00A00C151FA0D&url=http://clicK./JdClicK/?unionId=42054&siteId={source_id}&to=/act/BhDZ6a8y3CSrR.html\" target=\"_blank\"&Test&/a&";& & & & & findURLs(s);& & }}/*2.解析抽取html文件中的链接: */import java.io.BufferedRimport java.io.Fimport java.io.FileInputSimport java.io.FileWimport java.io.IOEimport java.io.InputStreamRimport java.util.regex.Mimport java.util.regex.Ppublic class testRegularExp{ public static void findURLs(String s){
String regex="&[aA]\\s.*?href=[\"\'\\s]*([^\"\'\\s]+)[\"\'\\s]*[^&]*&";
Pattern pile(regex);
Matcher mt=pt.matcher(s);
String filename="D:\\parseResult.txt";
FileWriter writer=new FileWriter(filename,true);
int count=0;
while(mt.find()){
if(mt.group(1).startsWith("http://")||mt.group(1).startsWith("https://")){
writer.write("链接:"+mt.group()+"\r\n");
writer.write("链接地址:"+mt.group(1)+"\r\n");
writer.write("链接文字:"+mt.group(2)+"\r\n");
writer.write("一共"+count+"个链接.");
writer.close();
}catch(IOException ex){
ex.printStackTrace();
} }& & public static void main(String[] args)& & {
&BufferedReader reader=
&StringBuffer buff=new StringBuffer();
&String html="";& & &try{
& & File input=new File("D://qq5.html");
& & reader=new BufferedReader(new InputStreamReader(new FileInputStream(input),"UTF-8"));
& & String oneLine=
& & while((oneLine=reader.readLine())!=null){
buff.append(oneLine+"\r\n");
& & reader.close();& & &}catch(IOException e){& &
e.printStackTrace();& & &}finally{& &
if(reader!=null){& &
reader.close();& &
}catch(IOException e){& &
e.printStackTrace();& &
}& & &}& & &html=buff.toString();& & &html.replaceAll("\"", "\\\"");& & &findURLs(html);&}}二、使用Htmlparser来抽取网页链接:import java.util.ArrayLimport java.util.HashSimport java.util.Iimport java.util.Limport java.util.Simport org.htmlparser.NodeFimport org.htmlparser.Pimport org.htmlparser.filters.TagNameFimport org.htmlparser.tags.LinkTimport org.htmlparser.util.NodeLimport org.htmlparser.util.ParserEimport org.htmlparser.visitors.HtmlPpublic class testHtmlParser{ private List&String& urlListWithJS=new ArrayList&String&(); private Set&String& urlSetWithJS=new HashSet&String&(); public void getHerf(String path,boolean isSupportJS) throws ParserException{
Parser parser=new Parser(path);
parser.setEncoding("GB2312");
HtmlPage page=new HtmlPage(parser);
parser.visitAllNodesWith(page);
NodeList nodelist=page.getBody();
NodeFilter filter=new TagNameFilter("A");
nodelist=nodelist.extractAllNodesThatMatch(filter,true);
int linkCount=0;
for(int i=0;i&nodelist.size();i++){
LinkTag link=(LinkTag)nodelist.elementAt(i);
if(link.getAttribute("href")!=null&&(link.getAttribute("href").contains("http://")||link.getAttribute("href").contains("https://"))){
linkCount++;
urlListWithJS.add(link.getAttribute("href"));
System.out.println("去重前该页面总共有:"+urlListWithJS.size()+"个链接.");
urlSetWithJS.addAll(urlListWithJS);
System.out.println("去重后该页面总共有:"+urlSetWithJS.size()+"个链接.");
Iterator it=urlSetWithJS.iterator();
while(it.hasNext()){
Object temp=it.next();
System.out.println(temp.toString());
} public static void main(String[] arguments){
& &String path="D://qq.html";
& &String path2="D://qq5.html";
& &testHtmlParser htmlParser=new testHtmlParser();
& & & & htmlParser.getHerf(path2,true);
& &}catch(ParserException e){
& & e.printStackTrace();
& &} }}三、使用Jsoup来抽取网页链接:import java.io.Fimport java.io.IOEimport java.util.ArrayLimport java.util.HashSimport java.util.Iimport java.util.Limport java.util.Simport org.jsoup.Jimport org.jsoup.nodes.Dimport org.jsoup.nodes.Eimport org.jsoup.select.E/**&* Example program to list links from a URL.&*/public class testJSoup { private static List&String& urlListWithJS=new ArrayList&String&(); private static Set&String& urlSetWithJS=new HashSet&String&();& & public static void main(String[] args) throws IOException {& & & & String path="D://qq.html";& & & & String path2="D://qq5.html";& & & & try{
& & & parserURL(path2,true);& & & & }catch(Exception e){& & & &
e.printStackTrace();& & & & }& & }& & public static void parserURL(String path,boolean isSupportJS) throws Exception{& &
File input=new File(path);& & & & Document doc=Jsoup.parse(input,"UTF-8");& & & & Elements links = doc.select("a");& & & & for (Element link : links) {& & & &
System.out.println(link.toString());
urlListWithJS.add(link.attr("abs:href"));& & & }
System.out.println("去重前该页面总共有:"+urlListWithJS.size()+"个链接.");
urlSetWithJS.addAll(urlListWithJS);
System.out.println("去重后该页面总共有:"+urlSetWithJS.size()+"个链接.");
Iterator it=urlSetWithJS.iterator();
while(it.hasNext()){
Object temp=it.next();
System.out.println(temp.toString());
阅读(1935)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'使用Htmlparser|Jsoup|正则表达式抽取网页链接',
blogAbstract:'一、使用正则表达式抽取网页链接:解析抽取字符串中的链接:import java.util.regex.Mimport java.util.regex.Ppublic class testRegularExp{\tpublic static void findURLs(String s){\t\tString regex=\"&[aA]\\\\s.*?href=[\\\"\\\'\\\\s]*([^\\\"\\\'\\\\s]+)[\\\"\\\'\\\\s]*[^&]*&\";',
blogTag:'htmlparser,jsoup,正则表达式,网页链接,抽取',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}利用Python抓取和解析网页(转载)
这是我写爬虫的时候搜到的一篇比较不错的文章
讲的还是比较详细 虽然代码有部分缩进错误 稍微修改下就可以有很好的效果了 于是我就脸皮厚的贴了过来 收藏吧算是
对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。本文上篇中,我们介绍了一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块。在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图像和Cookie等。同时还会介绍如何规范HTML文件的格式标签。
  一、(1)从HTML文档中提取链接
  Python语言还有一个非常有用的模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁、高效地解析HTML文档。所以,在处理HTML文档的时候,HTMLParser是最常用的模块之一。
import HTMLParser
import urllib
import sys
parseLinks(HTMLParser.HTMLParser):
def handle_starttag(self,
tag, attrs):
if tag == 'a':
for name,value in
if name == 'href':
print value
self.get_starttag_text()
parseLinks()
lParser.feed(urllib.urlopen(url).read())
& & (2)从网页中提取文本
import HTMLParser
import urllib
import sys
urlText = []
class parseText(HTMLParser.HTMLParser):
def handle_data(self, data):
if data != '\n':
urlText.append(data)
lParser = parseText()
lParser.feed(urllib.urlopen(url).read())
lParser.close()
fp = open("/home/zhou/web text.txt","w")
for item in urlText:
print item
fp.write(item)
fp.close()
(3)将网页保存下来
urlText = urllib.urlopen(url)
content = urlText.read()
fp = open("/home/zhou/web.html","w")
fp.write(content)
fp.close()
 二、从HTML文档中提取图像
  处理HTML文档的时候,我们常常需要从其中提取出所有的图像。使用HTMLParser模块后,这项任务将变得易如反掌。首先,我们需要定义一个新的HTMLParser类,以覆盖handle_starttag()方法,该方法的作用是查找img标签,并保存src属性值所指的文件。
  import&HTMLParser
  import&urllib
  def&getImage(addr):
  u&=&urllib.urlopen(addr)
  data&=&u.read()
  class&parseImages(HTMLParser.HTMLParser):
  def&handle_starttag(self,
tag, attrs):
  if&tag&==&'img':
  for&name,value&in&attrs:
  if&name&==&'src':
  getImage(urlString&+&"/"&+&value)
  u&=&urllib.urlopen(urlString)
  lParser.feed(u.read())
  定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象。然后,就可以使用urllib.urlopen(url)打开HTML文档并读取该HTML文件的内容了。
  为了解析HTML文件的内容并显示包含其中的图像,可以使用feed(data)函数将数据发送至HTMLParser对象。HTMLParser对象的feed函数将接收数据,并通过定义的HTMLParser对象对数据进行相应的解析。下面是一个具体的示例:
  import&HTMLParser
  import&urllib
  import&sys
  urlString&=&"http://www.python.org"
  #把图像文件保存至硬盘
  def&getImage(addr):
  u&=&urllib.urlopen(addr)
  data&=&u.read()
  splitPath&=&addr.split('/')
  fName&=&splitPath.pop()
  print&"Saving
%s"&%&fName
  f&=&open(fName,&'wb')
  f.write(data)
  f.close()
  #定义HTML解析器
  class&parseImages(HTMLParser.HTMLParser):
  def&handle_starttag(self,
tag, attrs):
  if&tag&==&'img':
  for&name,value&in&attrs:
  if&name&==&'src':
  getImage(urlString&+&"/"&+&value)
  #创建HTML解析器的实例
  lParser&=&parseImages()
  #打开HTML文件
  u&=&urllib.urlopen(urlString)
  print&"Opening
URL\n===================="
  print&<()
  #把HTML文件传给解析器
  lParser.feed(u.read())
  lParser.close()
  上述代码的运行结果如下所示:
  Opening URL
  ====================
  Date: Fri,&26&Jun&2009&10:54:49&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:&"e7-46d"
  Accept-Ranges: bytes
  Content-Length:&18151
  Connection: close
  Content-Type: text/html
  Saving python-logo.gif
  Saving trans.gif
  Saving trans.gif
  Saving afnic.fr.png
& 三、从HTML文档中提取文本
  处理HTML文档的时候,我们常常需要从其中提取出所有的文本。使用HTMLParser模块后,这项任务将变得非常简单了。首先,我们需要定义一个新的HTMLParser类,以覆盖handle_data()方法,该方法是用来解析并文本数据的。
  import&HTMLParser
  import&urllib
  class&parseText(HTMLParser.HTMLParser):
  def&handle_data(self,
  if&data&!=&'\n':
  urlText.append(data)
  lParser&=&parseText()
  lParser.feed(urllib.urlopen( \
  http://docs.python.org/lib/module-HTMLParser.html).read())
  定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象。然后,就可以使用urllib.urlopen(url)打开HTML文档并读取该HTML文件的内容了。
  为了解析HTML文件的内容并显示包含其中的文本,我们可以使用feed(data)函数将数据传递给HTMLParser对象。HTMLParser对象的feed函数将接收数据,并通过定义的HTMLParser对象对数据进行相应的解析。要注意的是,如果传给HTMLParser的feed()函数的数据不完整的话,那么不完整的标签会保存下来,并在下一次调用feed()函数时进行解析。当HTML文件很大,需要分段发送给解析器的时候,这个功能就会有用武之地了。下面是一个具体的代码示例:
  import&HTMLParser
  import&urllib
  urlText&=&[]
  #定义HTML解析器
  class&parseText(HTMLParser.HTMLParser):
  def&handle_data(self,
  if&data&!=&'\n':
  urlText.append(data)
  #创建HTML解析器的实例
  lParser&=&parseText()
  #把HTML文件传给解析器
  lParser.feed(urllib.urlopen( \
  “http://docs.python.org/lib/module-HTMLParser.html” \
  ).read())
  lParser.close()
  for&item&in&urlText:
  print&item
  上面代码的运行输出过长,在此略过
四、从HTML文档中提取Cookies
  很多时候,我们都需要处理Cookie,幸运的是Python语言的cookielib模块为我们提供了许多自动处理在HTML中的HTTP
Cookie的类。当处理要求为客户端设置Cookie的HTML文档的时候,这些类对我们非常有用。
  import&urllib2
  import&cookielib
  from&urllib2&import&urlopen,
  cJar&=&cookielib.LWPCookieJar()
  opener=urllib2.build_opener( \
  urllib2.HTTPCookieProcessor(cJar))
  urllib2.install_opener(opener)
  r&=&Request(testURL)
  h&=&urlopen(r)
  for&ind,
cookie&in&enumerate(cJar):
  print&"%d
- %s"&%&(ind,
  cJar.save(cookieFile)
  为了从HTML文档提取cookies,首先得使用cookielib模块的LWPCookieJar()函数创建一个cookie
jar的实例。LWPCookieJar()函数将返回一个对象,该对象可以从硬盘加载Cookie,同时还能向硬盘存放Cookie。
  接下来,使用urllib2模块的build_opener([handler, . .
.])函数创建一个opener对象,当HTML文件打开时该对象将处理cookies。函数build_opener可以接收零个或多个处理程序(这些程序将按照它们被指定的顺序连接在一起)作为参数并返回一个。
  注意,如果想让urlopen()使用opener对象来打开HTML文件的话,可以调用install_opener(opener)函数,并将opener对象传给它。否则,请使用opener对象的open(url)函数来打开HTML文件。
  一旦已经创建并安装了opener对象,就可以使用urllib2模块中的Request(url)函数来创建一个Request对象,然后就能使用urlopen(Request)函数来打开HTML文件了。
  打开HTML页面后,该页面的所有Cookie将被存放到LWPCookieJar对象中,之后,您可以使用LWPCookieJar对象的save(filename)函数了。
  import&os
  import&urllib2
  import&cookielib
  from&urllib2&import&urlopen,
  cookieFile&=&"cookies.dat"
  testURL&=&'/'
  #为cookie
jar 创建实例
  cJar&=&cookielib.LWPCookieJar()
  #创建HTTPCookieProcessor的opener对象
  opener&=&urllib2.build_opener(
  urllib2.HTTPCookieProcessor(cJar))
  #安装HTTPCookieProcessor的opener
  urllib2.install_opener(opener)
  #创建一个Request对象
  r&=&Request(testURL)
  #打开HTML文件
  h&=&urlopen(r)
  print&"页面的头部\n======================"
  print&<()
  print&"页面的Cookies\n======================"
  for&ind,
cookie&in&enumerate(cJar):
  print&"%d
- %s"&%&(ind,
  #保存cookies
  cJar.save(cookieFile)
  上述代码的运行结果如下所示:
  页面的头部
  ======================
  Cache-Control: private
  Content-Type: text/ charset=ISO-8859-1
  Set-Cookie: PREF=ID=5d733:NW=1:TM=:LM=:S=frfx--b3xt73TaEA; expires=Sun,&26-Jun-2011&11:26:48&GMT;
path=/; domain=.
  Date: Fri,&26&Jun&2009&11:26:48&GMT
  Server: mfe
  Expires: Fri,&26&Jun&2009&11:26:48&GMT
  Transfer-Encoding: chunked
  Connection: close
  页面的Cookies
  ======================
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 移动应用开发专业前景 的文章

 

随机推荐