python爬虫第二课-BeautifulSoup
主要包括对Beautiful Soup的学习和理解,及一个提取大学排名的实例。
Beautiful Soup
BeautifulSoup的对象
Tag
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
type(tag)
# <class 'bs4.element.Tag'>
Name
tag.name
# u'b'
Attributes
tag['class']
tag.attrs
NavigableString
tag.string
prettify()方法
soup.prettify()
soup.a.prettify()
BS的遍历
标签树的下行遍历
- .contents 子节点的列表,将
所有儿子节点存入列表 - .children子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
- .descendants子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
标签树的上行遍历
- .parent 节点的父亲标签
- .parents 节点先辈标签的迭代类型,用于循环遍历先辈节点
标签树的平行遍历
- .next_sibling 返回按照HTML文本顺序的下一个平行节点标签
- .previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
- .next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
- .previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
信息标记方式和提取
三种信息标记方式
XML eXtensible Markup Lauguage
<img src=“china.jpg” size=“10”> … </img>
JSON JavaScript Object Notation
有类型的键值对key:value
YAML YAML Ain’t Markup Language
无类型键值对key:value
HTML提取方式
例:
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"lxml")
for link in soup.find_all('a'):
print(link.get('href'))
find_all(name, attrs, recursive, string, **kwargs)
- name : 对标签名称的检索字符串
- attrs: 对标签属性值的检索字符串,可标注属性检索
- recursive: 是否对子孙全部检索,默认True
- string: <>…</>中字符串区域的检索字符串
扩展方法:
- <>.find() 搜索且只返回一个结果,同.find_all()参数
- <>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
- <>.find_parent() 在先辈节点中返回一个结果,同.find()参数
- <>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
- <>.find_next_sibling() 在后续平行节点中返回一个结果,同.find()参数
- <>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
- <>.find_previous_sibling() 在前序平行节点中返回一个结果,同.find()参数
提取大学排名的例子
1 |
|
python爬虫第二课-BeautifulSoup
http://example.com/posts/44202/