Python爬虫——BeautifulSoup4库入门

  1. 创建BeautifulSoup对象的两种方式:
  • 从字符串创建:soup = BeautifulSoup(html_str,'html.parser')
  • 从html文件创建:soup = BeautifulSoup(open('xx.html'))
  1. 解析器比较
解析器 优势
"html.parser" python内置标准库;速度适中;容错强
"lxml" 速度快;容错强;需要pip install lxml
"xml" 速度快;支持XML的解析器
"html5lib" 容错性最强;生成HTML5格式的文档;速度慢

常用对象

Tag

  • 与HTML或XML中的Tag相同,就是标签,有两个重要属性:nameattributes
  • name抽取方式:.name (Beautiful对象也可以看作是一个Tag)
  • attributes 抽取方式: .attrs可以拿到标签的所有属性,返回一个dict
    如果要提取某个属性(比如class属性)的值,可以用.get('class')或者['class'],返回一个列表。

NavigableString

获取标记内部的文字:.string

遍历文档树

  1. .contents的方式可以将Tag的子节点以列表的形式输出;.children同理,但是输出的是一个生成器,可以用循环来读取。.decendants可以对tag的所有子孙节点都循环递归出来。
  2. .parent可以获得某个元素的父节点,.parents则得到所有的父辈节点(与decendants一致)
  3. .next_siblings可以迭代出该节点后面的所有兄弟节点。(处于同一个父节点下面的)

检索方法

  • find_all()方法
    函数原型:find_all(name, attrs, recursive, text, **kwargs)
    1.name参数——标签名。
    直接传入标签名的字符串即可,也支持传入一个字符串数组
    可以传入一个正则表达式,比如re.compile('^b')可以检索到以b开头的标记比如body,b,br
  1. kwargs参数——可以传入id,href,_class(因为python中已有class作为保留字,故用_class代替class)等属性。
    比如soup.find_all('a', class_= 'sister', id = 'link')就是说找a标签,class属性为'sister,id为'link'的标签;
    href = True则搜索包含href属性的标签;
    另外,同样支持传入一个正则表达式
    如果某些html5里面的值不能用id = 'x'来表达,那么可以传入attrs = {'id' : 'x'}来表示。
    3.limit参数:可以用来限定返回个数,比如设置为limit =2 返回两个值。
    4.recursive参数:迭代,默认为True,若设置为False则只返回子节点内的搜索。
  • CSS选择器
    1.用soup.select(Tag)来找标签,返回是一个标签列表,比如soup.select('p')可以找到所有段落。soup.select('img')找到所有图片。
  1. 常见是' '表示标签,'.xxx'表示CSS class xxx属性。'div span'表示所有在div元素之内的span元素。 'div>span'表示直接在div下一级的span 。#comic表示带有id属性为comic的元素。'.t'代表class属性为t的元素。
  2. 是否存在某个属性来查找:'a[href]'可以查找出所有带有href属性的a标签。

你可能感兴趣的:(Python爬虫——BeautifulSoup4库入门)