2004年08月28日 星期六 15:38
对于这种简单的网页可以使用parser或者正则表达式来提取自己想要的内容
但是对于比较复杂的网页,例如:使用JavaScripts和VBScripts的网站就需要
HTML DOM Level2的解析了
目前在Python中的解决方法:
一个是通过COM调用浏览器来解析
另一个是通过DOMForm来解析
比如cn.yahoo.com的flash内容的url处理
我现在通过python win32com调用IE来得到IE解析后的内容就可以抓到完整的url了
> HTMLParser和sgml/htmllib的Parser一样都是正则表达式匹配的只考虑了ascii
> 只好自己来处理一下
> 例如:
>
> import htmllib, formatter
> import re
>
> hrefmatch = re.compile("[Hh][Rr][Ee][Ff]=(.*?)[\s>]")
>
> class MyParser(htmllib.HTMLParser):
> def __init__(self, verbose = 0):
> self.anchors = {}
> fmt = formatter.NullFormatter()
> htmllib.HTMLParser.__init__(self, fmt, verbose)
>
> def anchor_bgn(self, href, name, type):
> self.save_bgn()
> #self.anchor = href
> tag_text = self.get_starttag_text()
> #print tag_text
> myhref = hrefmatch.search(tag_text)
> if myhref:
> #print myhref.groups()
> self.anchor = myhref.groups()[0]
>
> def anchor_end(self):
> #print self.get_starttag_text()
> tagtxt = self.save_end().strip()
> if self.anchor and tagtxt:
> self.anchors[tagtxt] = self.anchors.get(tagtxt, []) + [self.anchor]
> ## def handle_starttag(self, tag, method, attributes):
> ## self.save_bgn()
> ## print "tag=",tag,"method=",method,"attributes=", attributes
> ## print self.get_starttag_text( )
> ## #self.anchor =
>
> fd = open("test.html", 'r')
> html = fd.read()
> html = unicode(html, 'mbcs')
> fd.close()
> #print html
> parser = MyParser()
> parser.feed(html)
> parser.close()
> for k in parser.anchors.keys():
> for a in parser.anchors[k]:
> print k, a
>
>
>
>
> > Anew,您好!
> >
> > sgml的parser不能正确处理中文,所以当遇到中文的时候就自动截断了。
> > 当然因为我的应用很简单,所以用正则表达式解决就可以。你的方法当然也是不错的。谢谢!
> >
> > ======= 2004-08-28 03:38:26 您在来信中写道:=======
> >
> > >dreamingk(天成),您好!
> > >
> > > 这几天大家讨论如何使用程序登陆论坛我很感兴趣,我前些日子就用Python来处理论坛里的文档。
> > > 但我没有用ClientCookie,因为我不知道有这个东西,最近刚知道。
> > > 我一直都是用Socket直接连Http的80,然后提交协议。其实很简单,你只要把IE游览这个论坛的TCP报文捕获下来,然后用Socket连就可以了。
> > > 而处理HTTP我用的是一个Div Into Python里的BaseHTMLProcessor. 这样就可以基本解决大多数的HTML处理.
> > > 但是像 ftp://music.popv.net:bbs.popv.net@218.104.78.34/游戏/莎木一章横须贺_Shenmue/Shenmue_OST2/船员の复响.mp3>网通公众网镜像 可能就有一点问题了(虽然我没测试,你可以去试试)
> > > 但我想用正则表达式处理就可以了, 例如: .*?)>.*?
> > > OK ,解决了.
> > >
> > >======= 2004-08-27 12:56:00 您在来信中写道:=======
> > >
> > >>Xie Yanbo,您好!
> > >>
> > >> 已经按照上述方法搞定了,可以正确登陆论坛。原来的原因是我没有用ClientCookie.urlopen()来打开网页,而是用的urllib.urlopen()也不能获得正确的网页。
> > >> 但是现在也有点问题。网页上的href都是这样的
> > >> ftp://music.popv.net:bbs.popv.net@218.104.78.34/游戏/莎木一章横须贺_Shenmue/Shenmue_OST2/船员の复响.mp3>网通公众网镜像
> > >> 但是我用sgml的parser解析获得的href都只有前半段 ftp://music.popv.net:bbs.popv.net@218.104.78.34/ ,这个是解析器的问题吗?
> > >>
> > >>======= 2004-08-27 11:49:26 您在来信中写道:=======
> > >>
> > >>>On 2004-08-25 11:00:1093402811 +0800, dreamingk(天成) wrote:
> > >>>> dreamingk(天成),您好!
> > >>>>
> > >>>> ClientCookie.CookieJar确实没有save 的方法
> > >>>> MSIECookieJar 才有这个方法
> > >>>
> > >>>研究了一下新版本的 ClientCookie,还有 Python2.4 的 cookielib,
> > >>>更新了一下那个登录 linuxforum 的代码,大家有兴趣可以看:
> > >>>
> > >>> http://xie.freezope.org/blog/2004/08/python.html
> > >>>
> > >>>_______________________________________________
> > >>>python-chinese list
> > >>>python-chinese at lists.python.cn
> > >>>http://python.cn/mailman/listinfo/python-chinese
> > >>>
> > >>
> > >>= = = = = = = = = = = = = = = = = = = =
> > >>
> > >>
> > >> 致
> > >>礼!
> > >>
> > >>
> > >> dreamingk(天成)
> > >> dreamingker at 163.com
> > >> 2004-08-27
> > >>
> > >>_______________________________________________
> > >>python-chinese list
> > >>python-chinese at lists.python.cn
> > >>http://python.cn/mailman/listinfo/python-chinese
> > >>
> > >
> > >= = = = = = = = = = = = = = = = = = = =
> > >
> > >
> > > 致
> > >礼!
> > >
> > >
> > > Anew
> > > Anewboy at citiz.net
> > > 2004-08-28
> > >
> > >_______________________________________________
> > >python-chinese list
> > >python-chinese at lists.python.cn
> > >http://python.cn/mailman/listinfo/python-chinese
> > >
> >
> > = = = = = = = = = = = = = = = = = = = =
> >
> >
> > 致
> > 礼!
> >
> >
> > dreamingk(天成)
> > dreamingker at 163.com
> > 2004-08-28
> >
> >
>
> -----------------------------------------------------------
> 马上到http://www.126.com申请260M全国最大免费邮箱!
> 提供新邮件到达手机短信提醒功能, 随时掌握邮件信息!
>
-----------------------------------------------------------
马上到http://www.126.com申请260M全国最大免费邮箱!
提供新邮件到达手机短信提醒功能, 随时掌握邮件信息!
Zeuux © 2025
京ICP备05028076号