Python Beautiful Soup简介

Beautiful Soup简介

Beautiful Soup 是一个能够从HTML或XML文件中提取数据的Python库.它可以经过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.html

BeautifulSoup

BeautifulSoup 对象表示的是一个文档的所有内容.大部分时候,能够把它看成 Tag 对象,它支持 遍历文档树 和 搜索文档树 中描述的大部分的方法.html5

由于 BeautifulSoup 对象并非真正的HTML或XML的tag,因此它没有nameattribute属性.但有时查看它的 .name 属性是很方便的,因此 BeautifulSoup 对象包含了一个值为 “[document]” 的特殊属性 .namepython

文档解析错误

文档解析错误有两种.一种是崩溃,Beautiful Soup尝试解析一段文档结果却抛除了异常,一般是 HTMLParser.HTMLParseError .还有一种异常状况,是Beautiful Soup解析后的文档树看起来与原来的内容相差不少.网络

这些错误几乎都不是Beautiful Soup的缘由,这不会是由于Beautiful Soup得代码写的太优秀,而是由于Beautiful Soup没有包含任何文档解析代码.异常产生自被依赖的解析器,若是解析器不能很好的解析出当前的文档,那么最好的办法是换一个解析器.app

最多见的解析错误是 HTMLParser.HTMLParseError: malformed start tag 和 HTMLParser.HTMLParseError: bad end tag .这都是由Python内置的解析器引发的,解决方法是 安装lxml或html5libjsp

最多见的异常现象是当前文档找不到指定的Tag,而这个Tag光是用眼睛就足够发现的了. find_all() 方法返回 [] ,而 find() 方法返回 None .这是Python内置解析器的又一个问题: 解析器会跳过那些它不知道的tag.解决方法仍是 安装lxml或html5libspa

示例代码

# -*- coding:UTF-8 -*-
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.163.com/')
soup = BeautifulSoup(r.text)
print("---------------------------------")
print(soup.title)
print("---------------------------------")
print(soup.title.name)
print("---------------------------------")
print(soup.title.string)
print("---------------------------------")
print(soup.title.parent.name)
print("---------------------------------")
print(soup.p)
print("---------------------------------")
print(soup.p['class'])
print("---------------------------------")
print(soup.a)
print("---------------------------------")
for link in soup.find_all('a'):
  print(link.get('href'))
print("---------------------------------")
print(soup.body.text)
print("---------------------------------")

输出结果:
---------------------------------
<title>网易</title>
---------------------------------
title
---------------------------------
网易
---------------------------------
head
---------------------------------
<p class="pos-abs">一周图片精选:2015.3.7-3.13</p>
---------------------------------
['pos-abs']
---------------------------------
<a class="ntes-nav-select-title ntes-nav-entry-bgblack JS_NTES_LOG_FE"
 data-module-name="n_topnavapp" href="http://www.163.com/#f=topnav">应用
<em class="ntes-nav-select-arr"></em></a>
---------------------------------
http://www.163.com/#f=topnav
http://m.163.com/newsapp/#f=topnav
http://music.163.com/#f=topnav
http://yuedu.163.com/#f=topnav
http://note.youdao.com/#f=topnav
http://love.163.com/
http://open.163.com/#f=topnav
http://caipiao.163.com/mobile/client_cp.jsp#from=yingyong
http://cidian.youdao.com/?vendor=topnav
http://mail.163.com/client/dl.html?from=mail46
http://www.lofter.com/?act=qb163rk_20141031_01
···
---------------------------------
应用
网易新闻
网易云音乐
网易云阅读
有道云笔记
···
---------------------------------

更多介绍可参考官方文档code

整理自网络

svoid
2015-03-14