search
HomeBackend DevelopmentPython TutorialUnderstand the Python crawler parser BeautifulSoup4 in one article

This article brings you relevant knowledge about Python, which mainly sorts out issues related to the crawler parser BeautifulSoup4. Beautiful Soup is a Python that can extract data from HTML or XML files. Library, which can implement the usual methods of document navigation, search, and modification of documents through your favorite converter. Let’s take a look at it. I hope it will be helpful to everyone.

Understand the Python crawler parser BeautifulSoup4 in one article

[Related recommendations: Python3 video tutorial ]

1. Introduction to the BeautifulSoup4 library

1. Introduction

Beautiful Soup is a Python library that can extract data from HTML or XML files. It can implement the usual ways of document navigation, search, and modification of documents through your favorite converter. Beautiful Soup will help You save hours or even days of work time.

BeautifulSoup4 converts the web page into a DOM tree:
Understand the Python crawler parser BeautifulSoup4 in one article

2. Download the module

1. Click on the window computerwin key R, enter: cmd

Understand the Python crawler parser BeautifulSoup4 in one article

##2. Install beautifulsoup4, Enter the corresponding pip command : pip install beautifulsoup4 . I have already installed the version that appears and the installation was successful.

Understand the Python crawler parser BeautifulSoup4 in one article
3. Guide package

form bs4 import BeautifulSoup
3. Parsing library

BeautifulSoup actually relies on the parser when parsing. In addition to supporting the HTML parser in the Python standard library, it also supports some third-party parsers ( Such as lxml):

ParserUsageAdvantagesDisadvantagesPython standard libraryPython's built-in standard library, execution speed Moderate, strong document fault tolerancePython 2.7.3 and versions before Python3.2.2 have poor document fault tolerancelxml HTML parsing libraryFast speed, strong document fault toleranceNeed to install C language librarylxml XML parsing libraryFast speed, the only parser that supports XMLRequires the installation of C language libraryhtm5lib parsing libraryThe best fault tolerance, browser way Parse documents and generate documents in HTMLS formatSlow speed, does not rely on external extensions

对于我们来说,我们最常使用的解析器是lxml HTML解析器,其次是html5lib.

二、上手操作

1. 基础操作

1. 读取HTML字符串:

from bs4 import BeautifulSoup

html = '''
<p>
    </p><p>
        </p><h4 id="Hello">Hello</h4>
    
    <p>
        </p>
                
  • Foo
  •             
  • Bar
  •             
  • Jay
  •         
        
                
  • Foo
  •                 百度官网             
  • Bar
  •         
       '''# 创建对象soup = BeautifulSoup(html, 'lxml')

2. 读取HTML文件

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('index.html'),'lxml')

3. 基本方法

from bs4 import BeautifulSoup

html = '''
<p>
    </p><p>
        </p><h4 id="Hello">Hello</h4>
    
    <p>
        </p>
                
  • Foo
  •             
  • Bar
  •             
  • Jay
  •         
        
                
  • Foo
  •                 百度官网             
  • Bar
  •         
       '''# 创建对象soup = BeautifulSoup(html, 'lxml')# 缩进格式print(soup.prettify())# 获取title标签的所有内容print(soup.title)# 获取title标签的名称print(soup.title.name)# 获取title标签的文本内容print(soup.title.string)# 获取head标签的所有内容print(soup.head)# 获取第一个p标签中的所有内容print(soup.p)# 获取第一个p标签的id的值print(soup.p["id"])# 获取第一个a标签中的所有内容print(soup.a)# 获取所有的a标签中的所有内容print(soup.find_all("a"))# 获取id="u1"print(soup.find(id="u1"))# 获取所有的a标签,并遍历打印a标签中的href的值for item in soup.find_all("a"):     print(item.get("href"))# 获取所有的a标签,并遍历打印a标签的文本值for item in soup.find_all("a"):     print(item.get_text())

2. 对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .

(1)Tag:Tag通俗点讲就是HTML中的一个个标签,例如:

soup = BeautifulSoup('<b>Extremely bold</b>','lxml')
tag = soup.b
print(tag)
print(type(tag))

输出结果:

<b>Extremely bold</b>
<class></class>

Tag有很多方法和属性,在 遍历文档树 和 搜索文档树 中有详细解释.现在介绍一下tag中最重要的属性: nameattributes

name属性:

print(tag.name)
# 输出结果:b
# 如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档:
tag.name = "b1"
print(tag)
# 输出结果:<b1>Extremely bold</b1>

Attributes属性:

# 取clas属性
print(tag['class'])

# 直接”点”取属性, 比如: .attrs :
print(tag.attrs)

tag 的属性可以被添加、修改和删除:

# 添加 id 属性
tag['id'] = 1

# 修改 class 属性
tag['class'] = 'tl1'

# 删除 class 属性
del tag['class']

(2)NavigableString:用.string获取标签内部的文字:

print(soup.b.string)print(type(soup.b.string))

(3)BeautifulSoup:表示的是一个文档的内容,可以获取它的类型,名称,以及属性:

print(type(soup.name))
# <type>

print(soup.name)
# [document]

print(soup.attrs)
# 文档本身的属性为空</type>

(4)Comment:是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。

print(soup.b)

print(soup.b.string)

print(type(soup.b.string))

3. 搜索文档树

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

(1)name 参数:name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉

  • 匹配字符串:查找与字符串完整匹配的内容,用于查找文档中所有的<a></a>标签

    a_list = soup.find_all("a")print(a_list)
  • 匹配正则表达式:如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容

    # 返回所有表示和<b>标签for tag in soup.find_all(re.compile("^b")):
        print(tag.name)</b>
  • 匹配列表:如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

    # 返回所有所有<p>标签和<a>标签:soup.find_all(["p", "a"])</a></p>

(2)kwargs参数

soup.find_all(id='link2')

(3)text参数:通过 text 参数可以搜搜文档中的字符串内容,与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表

# 匹配字符串
soup.find_all(text="a")

# 匹配正则
soup.find_all(text=re.compile("^b"))

# 匹配列表
soup.find_all(text=["p", "a"])

4. css选择器

我们在使用BeautifulSoup解析库时,经常会结合CSS选择器来提取数据。

注意:以下讲解CSS选择器只选择标签,至于获取属性值和文本内容我们后面再讲。

1. 根据标签名查找:比如写一个 li 就会选择所有li 标签, 不过我们一般不用,因为我们都是精确到标签再提取数据的

from bs4 import BeautifulSoup

html = '''
<p>
    </p><p>
        </p><h4 id="Hello">Hello</h4>
    
    <p>
        </p>
                
  • Foo
  •             
  • Bar
  •             
  • Jay
  •         
        
                
  • Foo
  •                 百度官网             
  • Bar
  •         
       '''# 创建对象soup = BeautifulSoup(html, 'lxml')# 1. 根据标签名查找:查找li标签print(soup.select("li"))

输出结果:

[
  • Foo
  • Bar
  • Jay
  • Foo
  • Bar
  • ]

    2. 根据类名class查找.1ine, 即一个点加line,这个表达式选的是class= "line "的所有标签,".”代表class

    print(soup.select(".panel_body"))

    输出结果:

    • Foo
    • Bar
    ]

    3. 根据id查找。#box,即一个#和box表示选取id-”box "的所有标签,“#”代表id

    print(soup.select("#list-1"))

    输出结果:

    [
    • Foo
    • Bar
    • Jay
    ]

    4. 根据属性的名字查找。class属性和id属性较为特殊,故单独拿出来定义一个". "“”来表示他们。

    比如:input[ name=“username”]这个表达式查找name= "username "的标签,此处注意和xpath语法的区别

    print(soup.select('ul[ name="element"]'))

    输出结果:

    [
    • Foo
    • Bar
    • Jay
    ]

    5. 标签+类名或id的形式。

    # 查找id为list-1的ul标签
    print(soup.select('ul#list-1'))
    print("-"*20)
    # 查找class为list的ul标签
    print(soup.select('ul.list'))

    输出结果:

    [
    • Foo
    • Bar
    • Jay
    ] -------------------- [
    • Foo
    • Bar
    • Jay
    • Foo
    • Bar
    ]

    6. 查找直接子元素

    # 查找id="list-1"的标签下的直接子标签liprint(soup.select('#list-1>li'))

    输出结果:

    [
  • Foo
  • Bar
  • Jay
  • ]

    7. 查找子孙标签

    # .panel_body和li之间是一个空格,这个表达式查找id=”.panel_body”的标签下的子或孙标签liprint(soup.select('.panel_body li'))

    输出结果:

    [
  • Foo
  • Bar
  • Jay
  • Foo
  • Bar
  • ]

    8. 取某个标签的属性

    # 1. 先取到<p>p = soup.select(".panel_body")[0]# 2. 再去下面的a标签下的href属性print(p.select('a')[0]["href"])</p>

    输出结果:

    https://www.baidu.com

    9. 获取文本内容有四种方式:

    (a) string:获得某个标签下的文本内容,强调-一个标签,不含嵌我。 返回-个字符串

    # 1. 先取到<p>p = soup.select(".panel_body")[0]# 2. 再去下面的a标签下print(p.select('a')[0].string)</p>

    输出结果:

    百度官网

    (b) strings:获得某个标签下的所有文本内容,可以嵌套。返回-一个生成器,可用list(生成器)转换为列表

    print(p.strings)print(list(p.strings))

    输出结果:

    <generator>['\n', '\n', 'Foo', '\n', 'Bar', '\n', 'Jay', '\n', '\n', '\n', 'Foo', '\n', '百度官网', '\n', 'Bar', '\n', '\n']</generator>

    (c)stripped.strings:跟(b)差不多,只不过它会去掉每个字符串头部和尾部的空格和换行符

    print(p.stripped_strings)print(list(p.stripped_strings))

    输出结果:

    <generator>['Foo', 'Bar', 'Jay', 'Foo', '百度官网', 'Bar']</generator>

    (d) get.text():获取所有字符串,含嵌套. 不过会把所有字符串拼接为一个,然后返回
    注意2:
    前3个都是属性,不加括号;最后一个是函数,加括号。

    print(p.get_text())

    输出结果:

    Foo
    Bar
    Jay
    
    
    Foo
    百度官网
    Bar

    【相关推荐:Python3视频教程

    BeautifulSoup(html,'html.parser')
    BeautifulSoup(html,'lxml')
    BeautifulSoup(html,'xml'
    BeautifulSoup(html,'htm5llib')

    The above is the detailed content of Understand the Python crawler parser BeautifulSoup4 in one article. For more information, please follow other related articles on the PHP Chinese website!

    Statement
    This article is reproduced at:CSDN. If there is any infringement, please contact admin@php.cn delete
    Merging Lists in Python: Choosing the Right MethodMerging Lists in Python: Choosing the Right MethodMay 14, 2025 am 12:11 AM

    TomergelistsinPython,youcanusethe operator,extendmethod,listcomprehension,oritertools.chain,eachwithspecificadvantages:1)The operatorissimplebutlessefficientforlargelists;2)extendismemory-efficientbutmodifiestheoriginallist;3)listcomprehensionoffersf

    How to concatenate two lists in python 3?How to concatenate two lists in python 3?May 14, 2025 am 12:09 AM

    In Python 3, two lists can be connected through a variety of methods: 1) Use operator, which is suitable for small lists, but is inefficient for large lists; 2) Use extend method, which is suitable for large lists, with high memory efficiency, but will modify the original list; 3) Use * operator, which is suitable for merging multiple lists, without modifying the original list; 4) Use itertools.chain, which is suitable for large data sets, with high memory efficiency.

    Python concatenate list stringsPython concatenate list stringsMay 14, 2025 am 12:08 AM

    Using the join() method is the most efficient way to connect strings from lists in Python. 1) Use the join() method to be efficient and easy to read. 2) The cycle uses operators inefficiently for large lists. 3) The combination of list comprehension and join() is suitable for scenarios that require conversion. 4) The reduce() method is suitable for other types of reductions, but is inefficient for string concatenation. The complete sentence ends.

    Python execution, what is that?Python execution, what is that?May 14, 2025 am 12:06 AM

    PythonexecutionistheprocessoftransformingPythoncodeintoexecutableinstructions.1)Theinterpreterreadsthecode,convertingitintobytecode,whichthePythonVirtualMachine(PVM)executes.2)TheGlobalInterpreterLock(GIL)managesthreadexecution,potentiallylimitingmul

    Python: what are the key featuresPython: what are the key featuresMay 14, 2025 am 12:02 AM

    Key features of Python include: 1. The syntax is concise and easy to understand, suitable for beginners; 2. Dynamic type system, improving development speed; 3. Rich standard library, supporting multiple tasks; 4. Strong community and ecosystem, providing extensive support; 5. Interpretation, suitable for scripting and rapid prototyping; 6. Multi-paradigm support, suitable for various programming styles.

    Python: compiler or Interpreter?Python: compiler or Interpreter?May 13, 2025 am 12:10 AM

    Python is an interpreted language, but it also includes the compilation process. 1) Python code is first compiled into bytecode. 2) Bytecode is interpreted and executed by Python virtual machine. 3) This hybrid mechanism makes Python both flexible and efficient, but not as fast as a fully compiled language.

    Python For Loop vs While Loop: When to Use Which?Python For Loop vs While Loop: When to Use Which?May 13, 2025 am 12:07 AM

    Useaforloopwheniteratingoverasequenceorforaspecificnumberoftimes;useawhileloopwhencontinuinguntilaconditionismet.Forloopsareidealforknownsequences,whilewhileloopssuitsituationswithundeterminediterations.

    Python loops: The most common errorsPython loops: The most common errorsMay 13, 2025 am 12:07 AM

    Pythonloopscanleadtoerrorslikeinfiniteloops,modifyinglistsduringiteration,off-by-oneerrors,zero-indexingissues,andnestedloopinefficiencies.Toavoidthese:1)Use'i

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Article

    Hot Tools

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    VSCode Windows 64-bit Download

    VSCode Windows 64-bit Download

    A free and powerful IDE editor launched by Microsoft

    PhpStorm Mac version

    PhpStorm Mac version

    The latest (2018.2.1) professional PHP integrated development tool

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Integrate Eclipse with SAP NetWeaver application server.

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.