爬虫系列10.BS4简介

来源:互联网 发布:windows 锁屏快捷键 编辑:程序博客网 时间:2024/06/14 21:49

1. 安装bs4,lxml,html5lib

  • easy_install beautifulsoup4
  • pip install beautiful4
    -linux:sudo python setup.py install

  • 如果代码抛出了 ImportError 的异常: “No module named HTMLParser”, 这是因为你在Python3版本中执行Python2版本的代码.

  • 如果代码抛出了 ImportError 的异常: “No module named html.parser”, 这是因为你在Python2版本中执行Python3版本的代码.

  • 或在bs4的目录中执行Python代码版本转换脚本 $ 2to3-3.2 -w bs4

2.常用解析方式

-python标准库:BeautifulSoup(markup, “html.parser”)
- lxml HTML 解析器:BeautifulSoup(markup, “lxml”)
- lxml XML 解析器:BeautifulSoup(markup, [“lxml”, “xml”])|BeautifulSoup(markup, “xml”)
- 唯一支持xml的解析器html5lib:BeautifulSoup(markup, “html5lib”),最好的容错性,以浏览器方式解析文档,生成html5文档,但是速度慢

3.创建Beautifusoup对象

  • 可以手动指定解析器

    soup = BeautifulSoup(html_doc, ‘html.parser’)

  • 打开本地文件

    soup = BeautifulSoup(open(‘index.html’))

    所有文档都会默认转换成Unicode编码 UTF-8格式

4.格式化输出

  • soup.title

    The Dormouse’s story

  • soup.title.name

    u’title’

  • soup.title.string

    u’The Dormouse’s story’

  • soup.title.parent.name

    u’head’

  • soup.p

    The Dormouse’s story

  • soup.p[‘class’]

    u’title’

  • soup.a

    Elsie

  • soup.find_all(‘a’)

    [Elsie,
    Lacie,
    Tillie]

  • soup.find(id=”link3”)

    Tillie

5、Beautiful对象种类

首先 Beautiful Soup将所有的HTML文档转换成一种复杂的树形结构,每个节点都是Python对象。总共划分为4种Tag, NavigableString, BeautifuLSoup, Comment

6.Tag对象(标签,与HTML中的标签相同)

通过soup.b获得,最重要的属性:
- name:标签名字,改变标签名字就会影响所有通过当前BeautifulSoup对象生成的HTML文档

  • attributes:一个tag可能有多个属性,如tag

    • tag的属性的操作方法与字典相同。tag[‘class’] # u’boldest’

    • 也可以通过直接“点”取属性,比如.attrs, tag.attrs {u’class’: u’boldest’}

    • tag的属性可以被添加,删除和修改: tag.get(“class”)

    • 多值属性,最常见的为class,还有一些属性rel , rev , accept-charset , headers , accesskey。在BeautifulSoup中多值属性返回列表list类型。
      css_soup = BeautifulSoup(‘

      ‘)
      css_soup.p[‘class’] –> [“body”, “strikeout”]

    -如果某个属性看起来好像有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,那么Beautiful Soup会将这个属性作为字符串返回,如id.
    id_soup = BeautifulSoup(‘

    ‘)
    id_soup.p[‘id’]
    ‘my id’

将tag转换成字符串时,多值属性会合并为一个值
rel_soup = BeautifulSoup(‘

Back to the homepage

‘)
rel_soup.a[‘rel’]
# [‘index’]
rel_soup.a[‘rel’] = [‘index’, ‘contents’]
print(rel_soup.p)
#

Back to the homepage

如果转换的文档是XML格式,那么tag中不包含多值属性
xml_soup = BeautifulSoup(‘

‘, ‘xml’)
xml_soup.p[‘class’]
# u’body strikeout’

标签内部的字符串:
字符串常被包含在tag内.Beautiful Soup用 NavigableString 类来包装tag中的字符串
tag.string
# u’Extremely bold’
type(tag.string)
#