BeautifulSoup是一种解析html,xml等文档的解析修改等操作的工具。
pip install beautifulsoup4
BeautifulSoup(markup,parser)
markup是html或者xml标记的文档
parser是解析器,支持html.parser(python自带解析器),lxml(需要额外韩妆),html5lib(额外安装)
BeautifulSoup(markup, “html.parser”)
BeautifulSoup(markup, “lxml”)
BeautifulSoup(markup, “html5lib”)
import requests #导入requests库获取网站页面代码
from bs4 import BeautifulSoup#导入BeautifulSoup库,注意导入要用bs4
doc = requests.get('https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html')#获取bs4库的html代码
soup = BeautifulSoup(doc.text,'html.parser')#初始化bs4对象,第一个参数是html文档内容,第二个参数是使用的解析器
#-------------获取文档首个标签-----------------------
soup.a#获取第一个a标签
''' <a accesskey="I" href="genindex.html" title="General Index">index</a> '''
#------------获取文档全部该类型标签---------------------
soup.find_all('a')#获取所有的a标签
soup.find_all('a',href='#id25')#获取所有href=‘#id25’的a标签
#------------获取单个父元素-------------------
soup.a.parent#获取该标签的父元素
''' <li class="right" style="margin-right: 10px"> <a accesskey="I" href="genindex.html" title="General Index">index</a></li> '''
#------------获取全部父元素------------------
soup.a.parents#获取该标签所有父元素,返回的事生成器,需要迭代遍历
''' <generator object parents at 0x7ff1cac1cfc0> '''
#-----------获取自己的孩子------------------
soup.ul.children#获取该节点直接孩子,返回迭代器
''' <list_iterator object at 0x7ff1caafa908> '''
soup.ul.contents#获取直接孩子,返回list
#-----------获取所有子孙------------------
soup.ul.descendants#获取所有子孙节点,返回生成器
''' <generator object descendants at 0x7ff1cac1cfc0> '''
#-----------获取兄弟节点------------------
#html文档是一个树形结构,所以兄弟也有前后
#获取下一个兄弟
soup.a.next_sibling
#获取前一个兄弟
soup.a.previous_sibling
#-----------获取内容------------------
#如果标签只有一个NavigableString 类型子节点可以使用string获取内容
soup.title.string
''' Beautiful Soup 4.2.0 文档 — Beautiful Soup 4.2.0 documentation '''
soup.a.attrs#获取第一个a标签所有属性和值,返回字典形式
''' {'accesskey': ['I'], 'href': 'genindex.html', 'title': 'General Index'} '''
class_
因为class是Python的关键字,所以需要使用class_来代替或者soup.find_all("a", attrs={"class": "sister"})
,class可以使用多个值class_=’a b’属性a b顺序和匹配一直,否则不能匹配。#查找多个标签
soup.find(['a','ul'])#返回所有a和ul标签,结果为list
#多条件查找
soup.find_all('a', href="#id73")#查找tag名为a并且href=“#id73”的标签
#使用这则表达式查找
soup.find_all(href=re.compile(r'#id\d*?'), limit=10)#返回10条href符合该正则表达式的标签
#另一种调用方式tag() ==> tag.find_all()
soup('a') #和soup.find_all('a')一样
和find_all
类似,不过,find_all
返回的是集合,而find返回的是单个元素
soup.find('a')#返回改tag下的第一个a标签
#另一种形式tag.tag
soup.a #和soup.find('a')一样
其他的用法大家参考以下文档
参考文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html