03.BeautifulSoup使用

来源:互联网 发布:游戏编程精粹9 pdf 编辑:程序博客网 时间:2024/05/17 05:04

BeautifulSoup使用

简介

BeautifulSoup是一种解析html,xml等文档的解析修改等操作的工具。

安装

pip install beautifulsoup4

初始化BeautifulSoup库

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库,注意导入要用bs4doc = 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'}'''

find_all( name , attrs , recursive , text , **kwargs )

  1. find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.
  2. name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉,搜索 name 参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True,如果为True就是返回所有tag。
  3. 如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性.
  4. 可以使用 limit 参数限制返回结果的数量.
  5. 如果只想搜索tag的直接子节点,可以使用参数 recursive=False
  6. 注意:如果是tag的class属性需要使用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函数

find_all类似,不过,find_all返回的是集合,而find返回的是单个元素

soup.find('a')#返回改tag下的第一个a标签#另一种形式tag.tagsoup.a #和soup.find('a')一样

其他的用法大家参考以下文档

参考文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

0 0