我是靠谱客的博主 聪明路灯,最近开发中收集的这篇文章主要介绍py3爬虫--beautiful-soup库的使用Beautiful soup安装引入解析库安装解析器基本使用标签选择器标准选择器css 选择器总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Beautiful soup

灵活又方便的网页解析库,处理高效,支持多种解析器。

利用它不用编写正则表达式即可方便的实现网页信息的提取

安装

pip install beautifulsoup4

引入

import bs4 from

解析库

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup,"html.parser")Python的内置标准库执行速度适中文档容错能力强Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup,"lxml")速度快文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup,["lxml", "xml"])``BeautifulSoup(markup,"xml")速度快唯一支持XML的解析器需要安装C语言库
html5libBeautifulSoup(markup,"html5lib")最好的容错性以浏览器的方式解析文档生成HTML5格式的文档速度慢不依赖外部扩展

安装解析器

$pip install lxml
$pip install html5lib

基本使用

  1. 安装包 pip install beautifulsoup4 pip install lxml

  2. 引入包 from bs4 import BeautifulSoup

  3. 构建对象 soup = BeautifulSoup(html,'lxml')

  4. 使用构造对象的方法

    1. print(soup.prettify())	# 格式化代码
      
    2. print(soup.title.string) # 获取文本对象的title内容
      
    3. html = """
      <!DOCTYPE html>
      <head>
      <title>TOP100榜 - 猫眼电影 - 一网打尽好电影</title>
      </head>
      <body>
      <div class="nav">
      <ul class="navbar">
      <li><a href="/" data-act="home-click"
      >首页</a></li>
      <li><a href="/films" data-act="movies-click" >电影</a></li>
      <li><a href="/cinemas" data-act="cinemas-click" >影院</a></li>
      <li><a href="http://www.gewara.com">演出</a></li>
      <li><a href="/board" data-act="board-click"
      class="active" >榜单</a></li>
      <li><a href="/news" data-act="hotNews-click" >热点</a></li>
      <li><a href="/edimall"
      >商城</a></li>
      </ul>
      </div>
      """
      # 引入库包
      from bs4 import BeautifulSoup
      # 声明对象,传入解析器lxml
      soup = BeautifulSoup(html,'lxml')
      # 格式化代码
      print(soup.prettify())
      print(soup.title.string)
      

标签选择器

选择标签

  • soup.title
  • soup.head
  • soup.p

获取标签名称

  • soup.title.name

获取标签属性

两种都可

  • soup.a['data-act']
  • soup.a.attrs['data-act']

获取内容

  • soup.a.string

嵌套选择

  • soup.head.title.string , head标签下的title的内容

子节点和子孙节点

  • soup.ul.contents; 返回的是列表的形式

  • soup.ul.children; 返回的是迭代器,用for循环打印出了

    • for i,child in enumerate(soup.ul.children):
      print(i,child)
      
  • soup.ul.descendants; 返回的是所有子孙;

    • for i ,child in enumerate(soup.ul.descendants):
      print(i,child)
      """
      <li><a data-act="movies-click" href="/films">电影</a></li>
      <a data-act="movies-click" href="/films">电影</a>
      电影
      """
      

父节点和祖先节点

  • soup.ul.parent 获取的是该标签的父标签

  • soup.ul.parents 获取到是该标签的父标签,该标签的父标签的父标签

    • print(list(enumerate(soup.ul.parents)))
      

兄弟节点

  • soup.ul.li.next_siblings 获取后面的兄弟节点
  • soup.ul.li.previous_siblings 获取前面的兄弟节点

标准选择器

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

  • 可根据标签名,属性、内容查找文档

    • name

      • print(soup.find_all('a'))
        print(soup.find_all('a')[0])
        
    • attrs

      • print(soup.find_all(attrs={'class':'navbar'}))
        print(soup.find_all(class_='navbar'))#class比较特殊需要写成 class_
        print(soup.find_all(id='navbar'))
        
    • text

      • print(soup.find_all(text='商城'))
        
  • find(name,attrs,recursive,text,**kwargs)

find返回单个元素,find_all返回所有元素

  • findparents() & findparent()
  • find_next_siblings() & find_next_sibling()
  • find_previous_siblings() & find_previous_sibling()
  • find_all_next() & find_next()
  • find_all_previous() & find_all_previou()

css 选择器

通过select()直接传入css选择器即可完成选择

  • soup.select(’.class’)
  • soup.select(’#id’)
  • soup.select(‘ul li’)

获取属性

  • print(soup.select('a')[0]['data-act'])
    #('a')[0]是第一个a标签
    #('a')[0]['data-act']是第一个a标签的data-act属性值
    

获取内容

  • print(soup.select('a')[0].get_text())
    

总结

  • 推荐使用lxml解析库,必要时使用html.parser
  • 标签选择筛选功能弱但是速度快
  • 建议使用find(),find_all()查询匹配单个结果或者多个结果
  • 如果对css选择器实习建议使用select()
  • 记住常用的获取属性和文本的方法

最后

以上就是聪明路灯为你收集整理的py3爬虫--beautiful-soup库的使用Beautiful soup安装引入解析库安装解析器基本使用标签选择器标准选择器css 选择器总结的全部内容,希望文章能够帮你解决py3爬虫--beautiful-soup库的使用Beautiful soup安装引入解析库安装解析器基本使用标签选择器标准选择器css 选择器总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(27)

评论列表共有 0 条评论

立即
投稿
返回
顶部