Python BeautifulSoup 简单笔记

body
{
font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif;
font-size: 10.5pt;
line-height: 1.5;
}
html, body
{

}
h1 {
font-size:1.5em;
font-weight:bold;
}
h2 {
font-size:1.4em;
font-weight:bold;
}
h3 {
font-size:1.3em;
font-weight:bold;
}
h4 {
font-size:1.2em;
font-weight:bold;
}
h5 {
font-size:1.1em;
font-weight:bold;
}
h6 {
font-size:1.0em;
font-weight:bold;
}
img {
border:0;
max-width: 100%;
}
blockquote {
margin-top:0px;
margin-bottom:0px;
}
table {
border-collapse:collapse;
border:1px solid #bbbbbb;
}
td {
border-collapse:collapse;
border:1px solid #bbbbbb;
}

http://rsj217.diandian.com/post/2012-11-01/40041235132

http://www.cnblogs.com/scrat/archive/2013/01/18/2866637.html

Beautiful Soup 是用 Python 写的一个 HTML/XML 的解析器,它可以很好的处理不规范标记并生成剖析树。通常用来分析爬虫抓取的web文档。对于 不规则的 Html文档,也有很多的补全功能,节省了开发者的时间和精力。

Beautiful Soup 的官方文档齐全,将官方给出的例子实践一遍就能掌握。官方英文文档中文文档

一 安装 Beautiful Soup

安装 BeautifulSoup 很简单,下载 BeautifulSoup  源码。解压运行

python setup.py install 即可。

测试安装是否成功。键入 import BeautifulSoup 如果没有异常,即成功安装

二 使用 BeautifulSoup

1. 导入BeautifulSoup ,创建BeautifulSoup 对象


1

2

3

4

5

6

7

8

9

10

11

12

from BeautifulSoup import BeautifulSoup           # HTML

from BeautifulSoup import BeautifulStoneSoup      # XML

import BeautifulSoup                              # ALL

                                                                                              

doc = [

    '<html><head><title>Page title</title></head>',

    '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',

    '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',

    '</html>'

]

# BeautifulSoup 接受一个字符串参数

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

2. BeautifulSoup对象简介

用BeautifulSoup 解析 html文档时,BeautifulSoup将 html文档类似 dom文档树一样处理。BeautifulSoup文档树有三种基本对象。

2.1. soup BeautifulSoup.BeautifulSoup


1

2

type(soup)

<class 'BeautifulSoup.BeautifulSoup'>

2.2. 标记 BeautifulSoup.Tag


1

2

type(soup.html)

<class 'BeautifulSoup.Tag'>

2.3 文本 BeautifulSoup.NavigableString


1

2

type(soup.title.string)

<class 'BeautifulSoup.NavigableString'>

3. BeautifulSoup 剖析树

3.1 BeautifulSoup.Tag对象方法

获取 标记对象(Tag)

标记名获取法 ,直接用 soup对象加标记名,返回 tag对象.这种方式,选取唯一标签的时候比较有用。或者根据树的结构去选取,一层层的选择


1

2

3

4

5

6

7

>>> html = soup.html

>>> html

<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body></html>

>>> type(html)

<class 'BeautifulSoup.Tag'>

>>> title = soup.title

<title>Page title</title>

content方法

content方法 根据文档树进行搜索,返回标记对象(tag)的列表


1

2

>>> soup.contents

[<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body></html>]


1

2

3

4

5

6

>>> soup.contents[0].contents

[<head><title>Page title</title></head>, <body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body>]

>>> len(soup.contents[0].contents)

2

>>> type(soup.contents[0].contents[1])

<class 'BeautifulSoup.Tag'>

使用contents向后遍历树,使用parent向前遍历树

next 方法

获取树的子代元素,包括 Tag 对象 和 NavigableString 对象。。。


1

2

3

4

>>> head.next

<title>Page title</title>

>>> head.next.next

u'Page title'


1

2

3

4

5

>>> p1 = soup.p

>>> p1

<p id="firstpara" align="center">This is paragraph<b>one</b>.</p>

>>> p1.next

u'This is paragraph'

nextSibling 下一个兄弟对象 包括 Tag 对象 和 NavigableString 对象


1

2

3

4

>>> head.nextSibling

<body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body>

>>> p1.next.nextSibling

<b>one</b>

与 nextSibling 相似的是 previousSibling,即上一个兄弟节点。

replacewith方法

将对象替换为,接受字符串参数


1

2

3

4

5

6

7

8

9

10

11

12

>>> head = soup.head

>>> head

<head><title>Page title</title></head>

>>> head.parent

<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body></html>

>>> head.replaceWith('head was replace')

>>> head

<head><title>Page title</title></head>

>>> head.parent

>>> soup

<html>head was replace<body><p id="firstpara" align="center">This is paragraph<b>one</b>.</p><p id="secondpara" align="blah">This is paragraph<b>two</b>.</p></body></html>

>>>

搜索方法

搜索提供了两个方法,一个是 find,一个是findAll。这里的两个方法(findAll和 find)仅对Tag对象以及,顶层剖析对象有效,但 NavigableString不可用。

findAll(nameattrsrecursivetextlimit**kwargs)

接受一个参数,标记名

寻找文档所有 P标记,返回一个列表


1

2

3

4

>>> soup.findAll('p')

[<p id="firstpara" align="center">This is paragraph<b>one</b>.</p>, <p id="secondpara" align="blah">This is paragraph<b>two</b>.</p>]

>>> type(soup.findAll('p'))

<type 'list'>

寻找 id="secondpara"的 p 标记,返回一个结果集


1

2

3

>>> pid = type(soup.findAll('p',id='firstpara'))

>>> pid

<class 'BeautifulSoup.ResultSet'>

传一个属性或多个属性对


1

2

3

4

5

>>> p2 = soup.findAll('p',{'align':'blah'})

>>> p2

[<p id="secondpara" align="blah">This is paragraph<b>two</b>.</p>]

>>> type(p2)

<class 'BeautifulSoup.ResultSet'>

利用正则表达式


1

2

>>> soup.findAll(id=re.compile("para$"))

[<p id="firstpara" align="center">This is paragraph<b>one</b>.</p>, <p id="secondpara" align="blah">This is paragraph<b>two</b>.</p>]

读取和修改属性


1

2

3

4

5

6

7

8

9

10

11

12

>>> p1 = soup.p

>>> p1

<p id="firstpara" align="center">This is paragraph<b>one</b>.</p>

>>> p1['id']

u'firstpara'

>>> p1['id'] = 'changeid'

>>> p1

<p id="changeid" align="center">This is paragraph<b>one</b>.</p>

>>> p1['class'] = 'new class'

>>> p1

<p id="changeid" align="center" class="new class">This is paragraph<b>one</b>.</p>

>>>

剖析树基本方法就这些,还有其他一些,以及如何配合正则表达式。具体请看官方文档

3.2 BeautifulSoup.NavigableString对象方法

NavigableString  对象方法比较简单,获取其内容


1

2

3

4

5

6

7

8

9

>>> soup.title

<title>Page title</title>

>>> title = soup.title.next

>>> title

u'Page title'

>>> type(title)

<class 'BeautifulSoup.NavigableString'>

>>> title.string

u'Page title'

至于如何遍历树,进而分析文档,已经 XML 文档的分析方法,可以参考官方文档。

一、

··一个BeautifulSoup的模块,安装就浪费了俺这么长时间,下载的是BeautifulSoup4-4.1.3,

安装的时候就是

python setup.py build

python setup.py install

就这么简单的两个命令,因为安装之前也看了下别人的就是这样,可是自己import的时候,总出错,弄了半天才搞好,原来是版本升级到4,

引入包要用

import bs4

from bs4 import BeautifulSoup

这样才可以的···

不能在

from BeautifulSoup import BeautifulSoup

这样了

二、string, get_text()输出都是unicode要显示都要encode('utf-8)

from bs4 import BeautifulSoup

a=open('d:\\python27\\123.txt','r')
htmlline = a.read()

soup=BeautifulSoup(htmlline)
links=soup.title.string

print links.encode('utf-8')

来自为知笔记(Wiz)

时间: 2024-10-13 12:09:21

Python BeautifulSoup 简单笔记的相关文章

Python爬虫简单笔记

Python2.7里内置了很多非常有用的库,它在我电脑上的位置在/usr/lib/python2.7中. 写个基本的爬虫要用到的库有urllib.urllib2.cookielib.sgmllib和re,下面先分别简单介绍下一些文件的信息和相关函数——具体的真的是建议阅读源码,网上找的资料反而不及它直观(但先了解个大概总是好的),但sgmllib除外.先看一段代码吧. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie

[简明python教程]学习笔记之编写简单备份脚本

[[email protected] 0503]# cat backup_ver3.py #!/usr/bin/python #filename:backup_ver3.py import os import time #source source=['/root/a.sh','/root/b.sh','/root/c.sh'] #source='/root/c.sh' #backup dir target_dir='/tmp/' today=target_dir+time.strftime('

python核心编程--笔记

python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file   以给定的文件运行python脚本 2 _在解释器中表示最后

Python Click 学习笔记(转)

原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发的一个小工具需要在命令行环境下操作,就写个学习笔记. 国际惯例,先来一段 "Hello World" 程序(假定已经安装了 Click 包). # hello.py import click @click.command() @click.option('--count', default

python BeautifulSoup模块的安装

python BeautifulSoup模块的安装 ···一个BeautifulSoup的模块,安装就浪费了俺这么长时间,下载的是BeautifulSoup4-4.1.3, 安装的时候就是 python setup.py build python setup.py install 就这么简单的两个命令,因为安装之前也看了下别人的就是这样,可是自己import的时候,总出错,弄了半天才搞好,原来是版本升级到4, 引入包要用 import bs4 from bs4 import BeautifulS

[简明python教程]学习笔记2014-05-05

今天学习了python的输入输出.异常处理和python标准库 1.文件 通过创建一个file类的对象去处理文件,方法有read.readline.write.close等 [[email protected] 0505]# cat using_file.py #!/usr/bin/python #filename:using_file.py poem='''Programing is fun when the work is done use Python! ''' f=file('poem.

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor

python 爬虫学习笔记1

经过一段时间的学习,终于入了门 先爬一个csdn 的blog练练手 整体思路是首先判断某个blog有多少页 然后根据页数 去获得相应的url 再爬出每一页的title和对应的url 这里使用了BeautifulSoup来解析页面 #coding=utf-8 import urllib2 from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding('utf-8') def query_item(input,

Python scikit-learn 学习笔记—环境篇

Python scikit-learn 学习笔记-环境篇 近来闲来无事,也面临毕业季.这段时间除了做毕业设计,和同学再多吃几顿饭玩玩游戏之外.剩下的时间浪费着实可惜.想着以后研究生还要读三年,不如现在多看看书或者别的资料.正逢最近参加阿里巴巴大数据比赛,趁机学了一阵Python 数据挖掘包scikit learn,估计以后说不定会用到,所以先行记录下来,分享给大家. 先说一下这段时间对sklearn的理解.这一个数据挖掘包给我最直观的感觉就是简易.这个挖掘包的一些算法核心编码部分是借鉴别的单独算