cari
Rumahpembangunan bahagian belakangTutorial PythonCara menggunakan modul python beautifulsoup4

Cara menggunakan modul python beautifulsoup4

May 11, 2023 pm 10:31 PM
pythonbeautifulsoup4

1. Tambahan pengetahuan asas BeautifulSoup4

BeautifulSoup4 ialah pustaka penghuraian python, terutamanya digunakan untuk menghuraikan HTML dan XML akan terdapat lebih banyak penghuraian HTML dalam sistem pengetahuan perangkak,

Perintah pemasangan untuk perpustakaan ini adalah seperti berikut:

pip install beautifulsoup4

BeautifulSoup Apabila parsing data, anda perlu bergantung pada parser pihak ketiga. kelebihan mereka adalah seperti berikut:

  • : Python mempunyai perpustakaan standard terbina dalam dan mempunyai toleransi kesalahan yang kuat; python 标准库 html.parser: Ia pantas dan mempunyai toleransi kesalahan yang kuat;

  • Seterusnya, gunakan kod HTML tersuai untuk menunjukkan penggunaan asas pustaka lxml 解析器 Kod ujian adalah seperti berikut:

    <html>
      <head>
        <title>测试bs4模块脚本</title>
      </head>
      <body>
        <h2 id="橡皮擦的爬虫课">橡皮擦的爬虫课</h2>
        <p>用一段自定义的 HTML 代码来演示</p>
      </body>
    </html>
  • Gunakan
  • untuk. hanya Operasi termasuk menginstant objek BS, mengeluarkan label halaman, dsb.

    from bs4 import BeautifulSoup
    text_str = """<html>
    	<head>
    		<title>测试bs4模块脚本</title>
    	</head>
    	<body>
    		<h2 id="橡皮擦的爬虫课">橡皮擦的爬虫课</h2>
    		<p>用1段自定义的 HTML 代码来演示</p>
    		<p>用2段自定义的 HTML 代码来演示</p>
    	</body>
    </html>
    """
    # 实例化 Beautiful Soup 对象
    soup = BeautifulSoup(text_str, "html.parser")
    # 上述是将字符串格式化为 Beautiful Soup 对象,你可以从一个文件进行格式化
    # soup = BeautifulSoup(open(&#39;test.html&#39;))
    print(soup)
    # 输入网页标题 title 标签
    print(soup.title)
    # 输入网页 head 标签
    print(soup.head)
    
    # 测试输入段落标签 p
    print(soup.p) # 默认获取第一个
    html5libKami boleh terus memanggil tag halaman web melalui objek BeautifulSoup Terdapat masalah di sini Memanggil tag melalui objek BS hanya boleh mendapatkan tag di tempat pertama, hanya satu

    tag, jika anda ingin mendapatkan lebih banyak kandungan, sila teruskan membaca.

Selepas mempelajari ini, kita perlu memahami 4 objek terbina dalam dalam BeautifulSoup: beautifulsoup4

BeautifulSoup

: objek asas, keseluruhan Objek HTML, Secara amnya, ia boleh dilihat sebagai objek Tag; p

: teg rentetan dalaman;

  • BeautifulSoup: objek anotasi, yang jarang digunakan dalam perangkak.

  • TagKod berikut menunjukkan kepada anda senario di mana objek ini muncul Beri perhatian kepada ulasan yang berkaitan dalam kod:

  • from bs4 import BeautifulSoup
    text_str = """<html>
    	<head>
    		<title>测试bs4模块脚本</title>
    	</head>
    	<body>
    		<h2 id="橡皮擦的爬虫课">橡皮擦的爬虫课</h2>
    		<p>用1段自定义的 HTML 代码来演示</p>
    		<p>用2段自定义的 HTML 代码来演示</p>
    	</body>
    </html>
    """
    # 实例化 Beautiful Soup 对象
    soup = BeautifulSoup(text_str, "html.parser")
    # 上述是将字符串格式化为 Beautiful Soup 对象,你可以从一个文件进行格式化
    # soup = BeautifulSoup(open(&#39;test.html&#39;))
    print(soup)
    print(type(soup))  # <class &#39;bs4.BeautifulSoup&#39;>
    # 输入网页标题 title 标签
    print(soup.title)
    print(type(soup.title)) # <class &#39;bs4.element.Tag&#39;>
    print(type(soup.title.string)) # <class &#39;bs4.element.NavigableString&#39;>
    # 输入网页 head 标签
    print(soup.head)
  • <.>Untuk

    Tag objek NavigableString mempunyai dua atribut penting, iaitu

    dan
  • from bs4 import BeautifulSoup
    text_str = """<html>
    	<head>
    		<title>测试bs4模块脚本</title>
    	</head>
    	<body>
    		<h2 id="橡皮擦的爬虫课">橡皮擦的爬虫课</h2>
    		<p>用1段自定义的 HTML 代码来演示</p>
    		<p>用2段自定义的 HTML 代码来演示</p>
    		<a href="http://www.csdn.net" rel="external nofollow"  rel="external nofollow" >CSDN 网站</a>
    	</body>
    </html>
    """
    # 实例化 Beautiful Soup 对象
    soup = BeautifulSoup(text_str, "html.parser")
    print(soup.name) # [document]
    print(soup.title.name) # 获取标签名 title
    print(soup.html.body.a) # 可以通过标签层级获取下层标签
    print(soup.body.a) # html 作为一个特殊的根标签,可以省略
    print(soup.p.a) # 无法获取到 a 标签
    print(soup.a.attrs) # 获取属性
    CommentKod di atas menunjukkan penggunaan mendapatkan atribut

    dan
  • atribut , di mana atribut
mendapat kamus dan nilai yang sepadan boleh diperoleh dengan kunci.

Dapatkan nilai atribut teg Dalam BeautifulSoup, anda juga boleh menggunakan kaedah berikut:

print(soup.a["href"])
print(soup.a.get("href"))

Dapatkan objek Selepas mendapat teg halaman web. , anda perlu mendapatkan tag Kandungan dijana melalui kod berikut.

print(soup.a.string)
nameSelain itu, anda juga boleh menggunakan atribut attrs dan kaedah untuk mendapatkan kandungan tag.

print(soup.a.string)
print(soup.a.text)
print(soup.a.get_text())

juga boleh mendapatkan semua teks dalam tag, hanya gunakan name dan attrs. attrs

print(list(soup.body.strings)) # 获取到空格或者换行
print(list(soup.body.stripped_strings)) # 去除空格或者换行

Pemilih teg/nod lanjutan untuk melintasi pepohon dokumen

Nod anak langsungNavigableStringElemen anak langsung objek teg (Tag), anda boleh menggunakan atribut

dan

diperolehi. text

from bs4 import BeautifulSoup
text_str = """<html>
	<head>
		<title>测试bs4模块脚本</title>
	</head>
	<body>
		<div id="content">
			<h2 id="橡皮擦的爬虫课-span-最棒-span">橡皮擦的爬虫课<span>最棒</span></h2>
            <p>用1段自定义的 HTML 代码来演示</p>
            <p>用2段自定义的 HTML 代码来演示</p>
            <a href="http://www.csdn.net" rel="external nofollow"  rel="external nofollow" >CSDN 网站</a>
		</div>
        <ul class="nav">
            <li>首页</li>
            <li>博客</li>
            <li>专栏课程</li>
        </ul>

	</body>
</html>
"""
# 实例化 Beautiful Soup 对象
soup = BeautifulSoup(text_str, "html.parser")
# contents 属性获取节点的直接子节点,以列表的形式返回内容
print(soup.div.contents) # 返回列表
# children 属性获取的也是节点的直接子节点,以生成器的类型返回
print(soup.div.children) # 返回 <list_iterator object at 0x00000111EE9B6340>
get_text() Sila ambil perhatian bahawa kedua-dua atribut di atas memperoleh nod anak

langsung

, seperti teg keturunan strings dalam teg stripped_strings dan tidak akan diperoleh secara berasingan.

Jika anda ingin mendapatkan semua teg, gunakan atribut , yang mengembalikan penjana dan semua teg termasuk teks dalam teg akan diambil secara berasingan.

print(list(soup.div.descendants))

Pemerolehan nod lain (tahu sahaja, semak dan gunakannya dengan segera)

contentschildren dan

: nod induk langsung dan semua nod induk ;

h2span,

,

, descendants: masing-masing mewakili nod adik beradik seterusnya, semua nod adik beradik di bawah, nod adik beradik sebelumnya dan semua nod adik beradik di atas. Memandangkan aksara baris baharu juga merupakan nod, jadi apabila menggunakan atribut ini, perhatikan aksara baris baharu; >: ini Beberapa atribut masing-masing mewakili nod sebelumnya atau nod seterusnya Ambil perhatian bahawa ia bukan hierarki, tetapi untuk semua nod, sebagai contoh, dalam kod di atas, nod seterusnya bagi nod

, dan. nod adik beradik nod

Ya

.
  • parentparentsFungsi berkaitan carian pepohon dokumen

  • Fungsi pertama yang perlu dipelajari ialah fungsi

    dan prototaip next_sibling adalah seperti berikut : next_siblingsprevious_sibling

    find_all(name,attrs,recursive,text,limit=None,**kwargs)
    previous_siblings

  • : Parameter ini ialah nama tag teg Contohnya,

    adalah untuk mencari semua rentetan nama teg dan ungkapan biasa boleh diterima Rumus dan senarai;

  • attrs:传入的属性,该参数可以字典的形式传入,例如 attrs={'class': 'nav'},返回的结果是 tag 类型的列表;

上述两个参数的用法示例如下:

print(soup.find_all(&#39;li&#39;)) # 获取所有的 li
print(soup.find_all(attrs={&#39;class&#39;: &#39;nav&#39;})) # 传入 attrs 属性
print(soup.find_all(re.compile("p"))) # 传递正则,实测效果不理想
print(soup.find_all([&#39;a&#39;,&#39;p&#39;])) # 传递列表
  • recursive:调用 find_all () 方法时,BeautifulSoup 会检索当前 tag 的所有子孙节点,如果只想搜索 tag 的直接子节点,可以使用参数 recursive=False,测试代码如下:

print(soup.body.div.find_all([&#39;a&#39;,&#39;p&#39;],recursive=False)) # 传递列表
  • text:可以检索文档中的文本字符串内容,与 name 参数的可选值一样,text 参数接受标签名字符串、正则表达式、 列表;

print(soup.find_all(text=&#39;首页&#39;)) # [&#39;首页&#39;]
print(soup.find_all(text=re.compile("^首"))) # [&#39;首页&#39;]
print(soup.find_all(text=["首页",re.compile(&#39;课&#39;)])) # [&#39;橡皮擦的爬虫课&#39;, &#39;首页&#39;, &#39;专栏课程&#39;]
  • limit:可以用来限制返回结果的数量;

  • kwargs:如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作 tag 的属性来搜索。这里要按 class 属性搜索,因为 class 是 python 的保留字,需要写作 class_,按 class_ 查找时,只要一个 CSS 类名满足即可,如需多个 CSS 名称,填写顺序需要与标签一致。

print(soup.find_all(class_ = &#39;nav&#39;))
print(soup.find_all(class_ = &#39;nav li&#39;))

还需要注意网页节点中,有些属性在搜索中不能作为kwargs参数使用,比如html5 中的 data-*属性,需要通过attrs参数进行匹配。

与 find_all()方法用户基本一致的其它方法清单如下:

  • find():函数原型find( name , attrs , recursive , text , **kwargs ),返回一个匹配元素;

  • find_parents(),find_parent():函数原型 find_parent(self, name=None, attrs={}, **kwargs),返回当前节点的父级节点;

  • find_next_siblings(),find_next_sibling():函数原型 find_next_sibling(self, name=None, attrs={}, text=None, **kwargs),返回当前节点的下一兄弟节点;

  • find_previous_siblings(),find_previous_sibling():同上,返回当前的节点的上一兄弟节点;

  • find_all_next(),find_next(),find_all_previous () ,find_previous ():函数原型 find_all_next(self, name=None, attrs={}, text=None, limit=None, **kwargs),检索当前节点的后代节点。

CSS 选择器 该小节的知识点与pyquery有点撞车,核心使用select()方法即可实现,返回数据是列表元组。

  • 通过标签名查找,soup.select("title")

  • 通过类名查找,soup.select(".nav")

  • 通过 id 名查找,soup.select("#content")

  • 通过组合查找,soup.select("div#content")

  • 通过属性查找,soup.select("div[id='content'")soup.select("a[href]")

在通过属性查找时,还有一些技巧可以使用,例如:

  • ^=:可以获取以 XX 开头的节点:

print(soup.select(&#39;ul[class^="na"]&#39;))
  • *=:获取属性包含指定字符的节点:

print(soup.select(&#39;ul[class*="li"]&#39;))

二、爬虫案例

BeautifulSoup 的基础知识掌握之后,在进行爬虫案例的编写,就非常简单了,本次要采集的目标网站 ,该目标网站有大量的艺术二维码,可以供设计大哥做参考。

Cara menggunakan modul python beautifulsoup4

下述应用到了 BeautifulSoup 模块的标签检索与属性检索,完整代码如下:

from bs4 import BeautifulSoup
import requests
import logging
logging.basicConfig(level=logging.NOTSET)
def get_html(url, headers) -> None:
    try:
        res = requests.get(url=url, headers=headers, timeout=3)
    except Exception as e:
        logging.debug("采集异常", e)

    if res is not None:
        html_str = res.text
        soup = BeautifulSoup(html_str, "html.parser")
        imgs = soup.find_all(attrs={&#39;class&#39;: &#39;lazy&#39;})
        print("获取到的数据量是", len(imgs))
        datas = []
        for item in imgs:
            name = item.get(&#39;alt&#39;)
            src = item["src"]
            logging.info(f"{name},{src}")
            # 获取拼接数据
            datas.append((name, src))
        save(datas, headers)
def save(datas, headers) -> None:
    if datas is not None:
        for item in datas:
            try:
                # 抓取图片
                res = requests.get(url=item[1], headers=headers, timeout=5)
            except Exception as e:
                logging.debug(e)

            if res is not None:
                img_data = res.content
                with open("./imgs/{}.jpg".format(item[0]), "wb+") as f:
                    f.write(img_data)
    else:
        return None
if __name__ == &#39;__main__&#39;:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
    }
    url_format = "http://www.9thws.com/#p{}"
    urls = [url_format.format(i) for i in range(1, 2)]
    get_html(urls[0], headers)

本次代码测试输出采用的 logging 模块实现,效果如下图所示。 测试仅采集了 1 页数据,如需扩大采集范围,只需要修改 main 函数内页码规则即可。 ==代码编写过程中,发现数据请求是类型是 POST,数据返回格式是 JSON,所以本案例仅作为 BeautifulSoup 的上手案例吧== 

Cara menggunakan modul python beautifulsoup4

Atas ialah kandungan terperinci Cara menggunakan modul python beautifulsoup4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Tujuan utama python: fleksibiliti dan kemudahan penggunaanTujuan utama python: fleksibiliti dan kemudahan penggunaanApr 17, 2025 am 12:14 AM

Fleksibiliti Python dicerminkan dalam sokongan multi-paradigma dan sistem jenis dinamik, sementara kemudahan penggunaan berasal dari sintaks mudah dan perpustakaan standard yang kaya. 1. Fleksibiliti: Menyokong pengaturcaraan berorientasikan objek, fungsional dan prosedur, dan sistem jenis dinamik meningkatkan kecekapan pembangunan. 2. Kemudahan Penggunaan: Tatabahasa adalah dekat dengan bahasa semulajadi, perpustakaan standard merangkumi pelbagai fungsi, dan memudahkan proses pembangunan.

Python: Kekuatan pengaturcaraan serba bolehPython: Kekuatan pengaturcaraan serba bolehApr 17, 2025 am 12:09 AM

Python sangat disukai kerana kesederhanaan dan kuasa, sesuai untuk semua keperluan dari pemula hingga pemaju canggih. Kepelbagaiannya dicerminkan dalam: 1) mudah dipelajari dan digunakan, sintaks mudah; 2) perpustakaan dan kerangka yang kaya, seperti numpy, panda, dan sebagainya; 3) sokongan silang platform, yang boleh dijalankan pada pelbagai sistem operasi; 4) Sesuai untuk tugas skrip dan automasi untuk meningkatkan kecekapan kerja.

Belajar python dalam 2 jam sehari: panduan praktikalBelajar python dalam 2 jam sehari: panduan praktikalApr 17, 2025 am 12:05 AM

Ya, pelajari Python dalam masa dua jam sehari. 1. Membangunkan pelan kajian yang munasabah, 2. Pilih sumber pembelajaran yang betul, 3 menyatukan pengetahuan yang dipelajari melalui amalan. Langkah -langkah ini dapat membantu anda menguasai Python dalam masa yang singkat.

Python vs C: Pro and Cons untuk PemajuPython vs C: Pro and Cons untuk PemajuApr 17, 2025 am 12:04 AM

Python sesuai untuk pembangunan pesat dan pemprosesan data, manakala C sesuai untuk prestasi tinggi dan kawalan asas. 1) Python mudah digunakan, dengan sintaks ringkas, dan sesuai untuk sains data dan pembangunan web. 2) C mempunyai prestasi tinggi dan kawalan yang tepat, dan sering digunakan dalam pengaturcaraan permainan dan sistem.

Python: komitmen masa dan kadar pembelajaranPython: komitmen masa dan kadar pembelajaranApr 17, 2025 am 12:03 AM

Masa yang diperlukan untuk belajar python berbeza dari orang ke orang, terutamanya dipengaruhi oleh pengalaman pengaturcaraan sebelumnya, motivasi pembelajaran, sumber pembelajaran dan kaedah, dan irama pembelajaran. Tetapkan matlamat pembelajaran yang realistik dan pelajari terbaik melalui projek praktikal.

Python: Automasi, skrip, dan pengurusan tugasPython: Automasi, skrip, dan pengurusan tugasApr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Python dan Masa: Memanfaatkan masa belajar andaPython dan Masa: Memanfaatkan masa belajar andaApr 14, 2025 am 12:02 AM

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python: Permainan, GUI, dan banyak lagiPython: Permainan, GUI, dan banyak lagiApr 13, 2025 am 12:14 AM

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft