Python论坛  - 讨论区

标题:[python-chinese] a wrapper for BeautifulSoup

2006年09月01日 星期五 17:44

cry zyqmail在tom.com
星期五 九月 1 17:44:56 HKT 2006

python,您好!

作了一个小玩意,BeautifulSoup的wrapper。呵呵,学习加玩乐。如果谁知道有人已经做过了,请告诉我。谢谢。

可以让你按照层次取得想要的东西。
比如:
soup = mysoup.MySoup(doc)
# soup里只包含了数据(其它的从BeautifulSoup可以轻易得到)。
# soup里有一个Body成员,一切都从这里开始。(里面所有的成员都以大写字母开头,且只包含Tag)

text1 = souppBody.Table[1].Tr[1].Td[2].content.string
text2 = Body.Table[1].Tr[1].Td[3].content.contents[0].string
#其中,content是BeautifulSoup的Tag.

mysoup.py : 这个小玩意
mysoup_test.py : 一个应用的例子,取在线字典的数据,使用:python mysoup_test.py 要查的词

	root$python mysoup_test.py python
	python:
	n. 丹舌,大蟒,巨蟒

mysoup.py ---------------------------------------------------------------------
# -*- coding: utf-8 -*-

"""
MySoup : a wrapper of BeautifulSoup

Author : Robin Zhang
Date : 2006/9/1
Example:
    soup = MySoup(''.join(s))
    text1 = soup.Body.Table[1].Tr[1].Td[0].Table[0].Tr[1].Td[0].Table[0].Tr[0].Td[0].Big[0].B[0].Font[0].content.string
    text2 = soup.Body.Table[1].Tr[1].Td[0].Table[0].Tr[1].Td[0].Table[0].Tr[0].Td[0].Big[1].Font[0].content.contents[0].string
    text3 = soup.Body.Table[1].Tr[1].Td[0].Table[0].Tr[1].Td[0].Table[0].Tr[0].Td[0].Big[1].Font[0].content.contents[2].string

"""

from BeautifulSoup import BeautifulSoup

class LayerTag:
    """
    """
    def __init__(self, Tag):
        """
        """
        self.content = Tag
        
    def AddSubTag(self, SubTagName, SubLayerTag):
        """
        """
        if getattr(self, SubTagName.capitalize(), None) == None:
            setattr(self, SubTagName.capitalize(), [])
        getattr(self, SubTagName.capitalize()).append(SubLayerTag)
                
class MySoup(BeautifulSoup):
    """
    """
    def __init__(self, *args, **kwargs):
        BeautifulSoup.__init__(self, *args, **kwargs)
        self.Body = self._create_tag_layer(self.html.body)

    def _create_tag_layer(self, Tag):
        """
        """
        layertag = LayerTag(Tag)
        for content in Tag.contents:
            if content.__class__.__name__ == "Tag":
                layertag.AddSubTag(content.name, self._create_tag_layer(content))
        return layertag

mysoup_test.py ---------------------------------------------------------------------
# -*- coding: utf-8 -*-

"""
MySoup_test : test MySoup

Author : Robin Zhang
Date : 2006/9/1
"""

import mysoup
import urllib2,sys

if __name__ == '__main__':
    """
    This example visits an on line dictionary site to consult a word
    """
    url = "http://sh.dict.cn/search/?q="

    if len(sys.argv) < 2:
        print "Usage : mysoup new_word"
        sys.exit()

    try:
        page = urllib2.urlopen("%s%s" % (url, sys.argv[1]))
        soup = mysoup.MySoup(page).Body.Table[1].Tr[1].Td[0].Table[0].Tr[1].Td[0].Table[0].Tr[0].Td[0]
        print soup.Big[0].B[0].Font[0].content.string.strip("\r\n")
        for item in soup.Big[1].Font[0].content.contents:
            if item.__class__.__name__!="Tag":
                print item.string.strip("\r\n")
    except Exception, msg:
        print "Error: %s" % msg
---------------------------------------------------------------------------------

                    致
礼!

            cry
            zyqmail在tom.com



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月16日 星期六 09:14

William Xu william.xwl在gmail.com
星期六 九月 16 09:14:54 HKT 2006

cry <zyqmail在tom.com> writes:

> 作了一个小玩意,BeautifulSoup的wrapper。呵呵,学习加玩乐。如果谁知道有
> 人已经做过了,请告诉我。谢谢。
>
> 可以让你按照层次取得想要的东西。

这个似乎不是很有必要吧,用 BeautifulSoup 本身就可以了。例如,

f = urllib.urlopen(url)
soup = BeautifulSoup(f.read())

读取第一个 table 的第一行第一列:

soup('table')[0]('tr')[0]('td')[0]

-- 
William

Zall's Laws:
	(1) Any time you get a mouthful of hot soup, the next thing you do
	   will be wrong.
	(2) How long a minute is, depends on which side of the bathroom
	   door you're on.


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月16日 星期六 11:40

bird devdoer devdoer在gmail.com
星期六 九月 16 11:40:47 HKT 2006

m殶'î–Ê.¦f—¥Æf•·šºØŸº]´Ó¯ýÿ^–ŠYbjeîÂ)e‰©±ÂX&j;)\¢g+Ë<ª™¨¥¶‰œ¢l+Š×¬殶'î•*.§
Ú¦—«殶'î•*.¥û«–X›º¹h¥éî®[(º^jëb~éR¢ê_­æµ¦åzÊ.¦Ö›•í-¯K]Ñh¥–&¦e©e°¶°³P'Êئ{*.ëZš‹­…û¥¡øh¶Ê.¦Ø^ìm¶§ƒ*.vŒ"–VÞº'ƒaèÂZ'©¢žë^ŠÇ^¥éݲ‰ð†'!²'^¡ûay¶­†º(™Ú(¯*.­ê'§+a¢w!Šw¬xú,¶Ç§vœ­†‰Ü†)Þ±éb²Û)ÊØhÉÒ¹»®&Þ±éݲæìr¸›zÚ)ÊØhÈbë­ê®zËeŠËl§+a¢w'R{.nÇ+‰·¬zwnžË›±Êâmëh§+a¢w!Šw¬z·ª¹ë-–+-²œ­†‰Üœ7­j)Hú!¶Úþœ­†‰ÜŸùšŠYšŸùb²Ø§~éÊØhÈbëuëÝ¡êÝz÷hz¸&j;)\¢hm¶Ÿÿ¦º#yËfÊؚŸ§Éÿr›Šۖˆ'{ij»@œtÌ-«miÈfz{pjË®æÛyÕ.m§ÿéÊØhÉÿ¦*^®f¢—úr¶'r§zÇ¿jÛZržžÛ?ÛM:ÓÝzÿ^yöúÛö­µ§!™éí†Ù¥

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月16日 星期六 12:06

Bruce Wang number5在gmail.com
星期六 九月 16 12:06:56 HKT 2006

On 9/16/06, bird devdoer <devdoer在gmail.com> wrote:
>
> 没有使过beautifulsoup,问问;html一定要是合法的xml(xhtml),beautiful才能解析么
>
>
beautiful soup 最大的卖点就是 可以处理不怎么合规范的 html/xml
更详细的资料可以看主页: http://www.crummy.com/software/BeautifulSoup/



-- 
simple is good
http://brucewang.net
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20060916/2c241503/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月16日 星期六 22:32

William Xu william.xwl在gmail.com
星期六 九月 16 22:32:06 HKT 2006

"bird devdoer" <devdoer在gmail.com> writes:

> 没有使过beautifulsoup,问问;html一定要是合法的xml(xhtml),beautiful才能
> 解析么

beautifulsoup 和那个 tidylib 类似,就是为了将不完全合法的 xml 完善成合法
的。:-) 

-- 
William

Metermaids eat their young.


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号