bs4 知识点

28 阅读2分钟

beautifulsoup4 是一个Python库,用于从HTML和XML文件中提取数据。它创建了一个解析树,使得你可以方便地提取标签、文本等。以下是beautifulsoup4的主要知识点和它们的用法:

  1. 安装 Beautiful Soup 你可以使用pip来安装Beautiful Soup:

    pip install beautifulsoup4
    
  2. 从网页中提取数据 首先,你需要导入库,并加载页面内容。通常与requests库结合使用来获取网页内容。

    from bs4 import BeautifulSoup
    import requests
    
    response = requests.get('http://example.com/')
    soup = BeautifulSoup(response.text, 'html.parser')
    
  3. 解析器 Beautiful Soup支持多种解析器,如html.parser, lxml, html5lib。选择解析器可能会影响解析的速度和灵活性。

    # 使用lxml解析器
    soup = BeautifulSoup(html_content, 'lxml')
    
  4. 查找元素

    • soup.find(): 用于查找第一个匹配的元素。
    • soup.find_all(): 用于查找所有匹配的元素。
    # 查找第一个title标签
    title_tag = soup.find('title')
    
    # 查找所有的段落标签
    paragraphs = soup.find_all('p')
    
  5. CSS选择器 使用.select()方法可以通过CSS选择器来选择元素,这对复杂的选择非常有用。

    # 选择id为link1的元素
    link = soup.select('#link1')
    
    # 选择所有class为sister的元素
    all_sisters = soup.select('.sister')
    
  6. 获取元素内容和属性

    • .text.get_text() 用于获取元素的文本内容。
    • .attrs 或者使用索引直接访问属性,如 tag['href'],用于获取标签的属性。
    # 获取链接的文本
    link_text = link[0].text
    
    # 获取链接的href属性
    link_href = link[0]['href']
    
  7. 导航树

    • .contents.children: 访问直接子节点。
    • .descendants: 访问所有子孙节点。
    • .parent.parents: 访问父节点和所有祖先节点。
    • .next_sibling.previous_sibling: 访问兄弟节点。
    # 直接子节点
    for child in title_tag.contents:
        print(child)
    
    # 所有子孙节点
    for child in title_tag.descendants:
        print(child)
    
  8. 修改文档树 可以使用.replace_with() 或.extract() 方法来修改文档树。

    # 替换元素
    tag = soup.find('b')
    tag.replace_with("This is a bold text")
    
    # 移除元素
    tag = soup.find('a')
    tag.extract()
    
  9. 输出和编码

    • .prettify():格式化输出HTML/XML。
    • .encode():编码输出,例如转换为utf-8。
    pretty_html = soup.prettify()
    utf8_html = soup.encode("utf-8")
    
  10. 与正则表达式结合使用 可以使用正则表达式来进行更加灵活的搜索。

    import re
    tags = soup.find_all(re.compile("^b"))  # 查找所有以'b'开头的标签
    classes = soup.find_all(class_=re.compile("sister"))  # 查找class中包含'sister'的所有标签
    

这是一个基本的beautifulsoup4知识点列表,配合实例和代码片段来说明每个知识点的使用。在实际应用中,你可能需要根据具体的HTML/XML结构和你的需要来灵活运用这些方法。