zoukankan      html  css  js  c++  java
  • BeautifulSoup库

    ## python爬虫-BeautifulSoup库

    python爬虫抛开其它,主要依赖两类库:HTTP请求、网页解析;这里requests可以作为网页请求的关键库,BeautifulSoup库则是网页内容解析的关键库;爬虫架构分为五部分:调度器、URL管理器、网页下载器、网页解析器、应用程序等。

    requests库是通过封装urllib库的一个HTTP请求库,可以实现urllib绝大部分的功能且使用性高。BeautifulSoup库是第三方库,用来提取xml/html中的数据。

    ``` python3
    #! python3

    import requests
    from bs4 import BeautifulSoup

    responses = requests.get("https://www.baidu.com")
    responses.encoding = "utf-8"
    # bs解析对象
    soup = BeautifulSoup(responses.text,"html.parser",from_encoding="utf-8")
    # 获取所有a标签内容
    links = soup.find_all('a')
    for link in links:
    print(link.name,link['href'],link.get_text())
    ```

    **解析器**

    bs4使用时需要指定一个解析器:

    - html.parse:python自带,容错不高
    - lxml:解析速度快需要额外安装 `pip install lxml`
    - xml:同属lxml库,支持xml文档 `pip install lxml`
    - html5lib:容错高,速度慢 `pip install html5lib`

    **初始化操作:创建BeautifulSoup对象**

    ``` python
    soup = BeautifulSoup(htmlText,'html.parser')
    ```
    初始化操作会打开一个html文件/页面,创建一个BeautSoup对象,同时初始化要指定解析器。

    BeautifulSoup对象即可按照标准缩进格式输出:`soup.prettify()`

    **结构化数据**

    - `soup.title`查看title标签(包含标签输出html)
    - `soup.title.name`查看title标签的标签名
    - `soup.title.string`查看title标签的text内容
    - `soup.title.parent.name`查看title父标签名
    - `soup.p`查看p标签(第一个)
    - `soup.p['class']`查看p标签的属性内容
    - `soup.find_all('a')`查看所有a标签(以列表返回)
    - `soup.find(id="link3")`查看属性id='link3'的标签
    - `soup.get_text()`获取文字内容

    **对象种类**

    bs4将html文档转换成一个复杂的树形结构,每个节点都将是python-bs4的对象,包括

    - Tag对象:与html/xml中的tag相同;包含多种方法和属性;
    - `tag.name` 获取tag的名字
    - `tag.attributes` 获取标签的某个属性值`tag['class']`操作方法和字典相同,支持增删改查;
    - 字符串对象:字符串包含在tab内;字符串对象不支持其它方法。
    `tag.string`获取标签内的text文本内容
    - BeautifulSoup对象标识一个文档的全部内容
    - 特殊对象:注释内容对象

    **遍历文档树**

    我们可以通过点`.`取方式,获取子节点以及子节点的子节点直至没有子节点,但这种方法只可以获取第一个子节点;可以使用`.find_all()`可以当前节点下指定的所有tab节点

    `.contents` 将当前tag的子节点以列表方式输出
    `.children` 实现对tag子节点进行循环
    `.descendants` 实现对所有子孙节点的递归循环
    `.string` 当tag只有一个字符串对象时使用
    `.strings` tag包含多个字符串使用,循环获取;可以使用`.stripped_strings`去除多余的空白内容

    `.parent` 当前节点的父节点
    `.parents` 递归获取元素的所有父节点

    `.next_sibling` 遍历所有兄弟节点(之后的所有兄弟节点)`.next_siblings`
    `.previous_sibling` 遍历所有兄弟节点(之前的所有兄弟节点)`.previous_siblings`

    **搜索文档树**

    `.find_all( name , attrs , recursive , string , **kwargs )`

    `.find( name , attrs , recursive , string , **kwargs )`

    > 支持字符串、正则、列表、true、自定义方法

    `.limit`支持定义搜索范围和数量
    `.recursive`局限范围只搜索直接子节点

    其它……[搜索文档树](https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id27)

    **输出**

    `.prettify()`格式化输出
    `.unicode()`/`str()`压缩格式输出

    `.get_text()`输出文本内容

    我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2t9x6jeycjgg8

  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/13920594.html
Copyright © 2011-2022 走看看