2024年6月14日发(作者:)

Beautiful Soup documentationPage 1

BeautifulSoup中文文档

原文byLeonardRichardson(leonardr@)

翻译by

RichieYan(richieyan@)

###如果有些翻译的不准确或者难以理解,直接看例子吧。###

英文原文点

这里

BeautifulSoup是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parsetree)。它提供简单又

常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。对于Ruby,使用RubyfulSoup。

这个文档说明了BeautifulSoup3.0主要的功能特性,并附有例子。从中你可以知道这个库有哪些好处,它是怎样工作的,怎样让

它帮做你想做的事以及你该怎样做当它做的和你期待不一样。

目录

快速开始

剖析文档

剖析HTML

剖析XML

如果它不工作

使用Unicode的BeautifulSoup,Dammit

输出文档

剖析树

Tag

s的属性

Navigating剖析树

parent

contents

string

nextSibling

and

previousSibling

next

and

previous

遍历

Tag

使用标签名作为成员

Searching剖析树

Thebasicfindmethod:

findAll(name,attrs,recursive,text,limit,**kwargs)

使用CSS类查找

findall

一样调用tag

find(name,attrs,recursive,text,**kwargs)

first

哪里去了?

Searching剖析树内部

findNextSiblings(name,attrs,text,limit,**kwargs)

and

findNextSibling(name,attrs,text,**kwargs)

findPreviousSiblings(name,attrs,text,limit,**kwargs)

and

findPreviousSibling(name,attrs,text,**kwargs)

findAllNext(name,attrs,text,limit,**kwargs)

and

findNext(name,attrs,text,**kwargs)

findAllPrevious(name,attrs,text,limit,**kwargs)

and

findPrevious(name,attrs,text,**kwargs)

Modifying剖析树

改变属性值

删除元素

替换元素

添加新元素

常见问题(Troubleshooting)

为什么BeautifulSoup不能打印我的no-ASCII字符?

BeautifulSoup弄丢了我给的数据!为什么?为什么?????

BeautifulSoup太慢了!

高级主题

产生器(Generators)

其他的内部剖析器

定制剖析器(Parser)

实体转换

使用正则式处理糟糕的数据

玩玩

SoupStrainer

s

通过剖析部分文档来提升效率

使用

extract

改进内存使用

其它

使用BeautifulSoup的其他应用

类似的库

小结

快速开始

从这里获得BeautifulSoup。变更日志描述了3.0版本与之前版本的不同。

在程序中中导入BeautifulSoup库:

/software/BeautifulSoup/8/12/2010 3:58:02 PM

Beautiful Soup documentationPage 2

from BeautifulSoup import BeautifulSoup # For processing HTML

from BeautifulSoup import BeautifulStoneSoup # For processing XML

import BeautifulSoup # To get everything

下面的代码是BeautifulSoup基本功能的示范。你可以复制粘贴到你的python文件中,自己运行看看。

from BeautifulSoup import BeautifulSoup

import re

doc = ['Page title',

'

This is paragraph one.',

'

This is paragraph two.',

'']

soup = BeautifulSoup(''.join(doc))

print fy()

#

#

# </p><p style="text-indent: 2em;font-size:18px;"># Page title</p><p style="text-indent: 2em;font-size:18px;">#

#

#

#

# This is paragraph

#

# one

#

# .

#

#

# This is paragraph

#

# two

#

# .

#

#

#

navigatesoup的一些方法:

ts[0].name

# u'html'

ts[0].contents[0].name

# u'head'

head = ts[0].contents[0]

# u'html'

# Page title

# u'body'

ts[0]

#

This is paragraph one.

ts[0].nextSibling

#

This is paragraph two.

下面是一些方法搜索soup,获得特定标签或有着特定属性的标签:

titleTag =

titleTag

# Page title

# u'Page title'

len(soup('p'))

# 2

l('p', align="center")

# [

This is paragraph one.

]

('p', align="center")

#

This is paragraph one.

soup('p', align="center")[0]['id']

# u'firstpara'

('p', align=e('^b.*'))['id']

# u'secondpara'

('p').

# u'one'

soup('p')[1].

# u'two'

修改soup也很简单:

titleTag['id'] = 'theTitle'

ts[0].replaceWith("New title")

# New title

t()

fy()

#

#

/software/BeautifulSoup/8/12/2010 3:58:02 PM