@qinian
2018-07-20T13:14:04.000000Z
字数 1892
阅读 1210
爬虫
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
参考:中文文档
html演示代码
html_doc = """<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>"""
基本用法
from bs4 import BeautifulSoup # 解析html,官方推荐写法soup = BeautifulSoup(html_doc, 'lxml') # 以lxml解析器解析,本地导入写法#soup = BeautifulSoup(open("index.html"))soup.prettify() # 补全html代码,容错。print(soup.prettify())print(soup.p) # 第一个p标签print(soup.a)print(soup.title.string) #标题内容print(soup.title.name) # 标题的名称print(soup.head)print(soup.p['class']) # p标签下class属性的值soup.find_all('a') # 找到所有a标签soup.find(id="link3") # 找到id值是link3的标签for link in soup.find_all('a'):print(link.get('href'))print(soup.get_text()) # 从soup中获取文字
遍历文档树
1、tag的content属性可以将tag的子节点和子孙节点以**列表**的方式输出print(soup.p.contents)print(soup.p.contents[1])2、children返回的不是一个 list,不过我们可以通过遍历获取所有子节点,它是一个 list 生成器对象,i是索引,child是内容。for i,child in enumenerate(soup.p.children):print(i,child)3、通过子节点可获得其父节点,祖先节点,以及上下兄弟节点soup.a.parentsoup.a.parentssoup.a.next_sliblings (下一个)soup.a.previous_sliblings (上一个)4,寻找节点,以下几种传递方式soup.find_all('a') # 找到所有a标签print(soup.find_all("a", limit=2)) #限制搜索结果数for link in soup.find_all('a'):print(link.get('href'))soup.find_all(id='1')soup.find_all(class_='name')#关键字 class 在Python中是保留字,使用 class 做参数会导致语法错误,可用class_soup.find_all(text='文本')print(soup.find_all(['title','b'])) # 传递列表进去,匹配到同时又两个标签相同的标签import re'''传递正则表达式'''for tag in soup.find_all(re.compile("^b")):print(tag.name)print(soup.find_all(attrs={"class":"title"}))#attrs参数,定义一个字典参数来搜索包含特殊属性的tag5,css选择器soup.select("title")soup.select("p:nth-of-type(3)")