Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,经过解析文档为用户提供须要抓取的数据,由于简单,因此不须要多少代码就能够写出一个完整的应用程序。html
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不须要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。而后,你仅仅须要说明一下原始编码方式就能够了。python
Beautiful Soup已成为和lxml、html6lib同样出色的python解释器,为用户灵活地提供不一样的解析策略或强劲的速度。 api
经过定位 HTML 标签来格式化和组织复杂的网络信息,用简单易用的 Python 对象为咱们展示 XML 结构信息。 它包含三个对象:服务器
使用方法:网络
1>导入bs4库和urllib库(用于打开html网页):函数
from bs4 import BeautifulSoup from urllib.request import urlopen
2>建立一个BeautifulSoup对象:工具
from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html") bsObj = BeautifulSoup(html)
其中,http://www.pythonscraping.com/pages/page3.html 是一个简单的用于测试爬虫程序的网页:
测试
3>.find() 与 .findAll() 函数编码
例如:nameList = bsObj.findAll("span", {"class":"green"}) ;抽取全部属性为 green的span标签内的文字,find()和findAll()是最经常使用的两个函数,借助它们,利用标签的不一样属性轻松地过滤HTML页面,查找须要的标签组或者标签。
url
用法:
多数状况下可能只须要用到前两个参数,tag和attributes,attributes指HTML标签的属性,递归参数 recursive 是一个布尔变量。你想抓取 HTML 文档标签结构里多少层的信息?若是recursive 设置为 True, findAll 就会根据你的要求去查找标签参数的全部子标签,以及子标签的子标签。若是 recursive 设置为 False, findAll 就只查找文档的一级标签。 findAll默认是支持递归查找的( recursive 默认值是 True);通常状况下这个参数不须要设置,除非你真正了解本身须要哪些信息,并且抓取速度很是重要,那时你能够设置递归参数
text参数用于匹配标签的文本内容,如:nameList = bsObj.findAll(text="the prince")
keword能够选择具备制定属性的标签。
2. 第一个爬虫程序:
先贴代码:
from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTitle(url): try: html = urlopen(url) except HTTPError as e: return None try: bsObj = BeautifulSoup(html.read(),'lxml') title = bsObj.body.h1 except AttributeError as e: return None return title title = getTitle("http://www.pythonscraping.com/pages/page1.html") if title == None: print("Title could not be found") else: print(title)
输出目标网页内title标签内的文本:<h1>An Interesting Title</h1>,getTitle()函数返回网页的标题,若是获取网页遇到问题就返回一个 None 对象。 若是服务器不存在, html 就是一个 None 对象,html.read() 就会抛出 AttributeError 。