Sup Cantik

Mencari Nod Anak Dengan Sup Cantik

Mencari Nod Anak Dengan Sup Cantik
Tugas mengikis web adalah yang memerlukan pemahaman tentang bagaimana laman web disusun. Untuk mendapatkan maklumat yang diperlukan dari laman web, seseorang perlu memahami struktur halaman web, menganalisis tag yang menyimpan maklumat yang diperlukan dan kemudian atribut tag tersebut.

Bagi pemula dalam mengikis web dengan BeautifulSoup, artikel yang membincangkan konsep mengikis web dengan perpustakaan yang hebat ini boleh didapati di sini.

Artikel ini adalah untuk pengaturcara, penganalisis data, saintis atau jurutera yang sudah memiliki kemahiran mengekstrak kandungan dari laman web menggunakan BeautifulSoup. Sekiranya anda tidak mempunyai pengetahuan mengenai perpustakaan ini, saya menasihati anda untuk mengikuti tutorial BeautifulSoup untuk pemula.

Sekarang kita boleh meneruskan - Saya mahu mempercayai bahawa anda sudah memasang perpustakaan ini.  Sekiranya tidak, anda boleh melakukan ini menggunakan arahan di bawah:

pip pasang BeautifulSoup4

Oleh kerana kami berusaha mengekstrak data dari HTML, kami perlu mempunyai halaman HTML asas untuk mempraktikkan konsep ini.  Untuk artikel ini, kami akan menggunakan coretan HTML ini untuk latihan. Saya akan memberikan potongan HTML berikut kepada pemboleh ubah menggunakan petikan tiga di Python.

contoh_content = "" "

LinuxHint



Untuk membuat senarai yang tidak tersusun, tag ul digunakan:
 




Untuk membuat senarai yang dipesan, tag ol digunakan:
 


    Berikut adalah senarai pesanan
  1. Nombor satu

  2. Nombor dua



Petunjuk Linux, 2018



"" "

Sekarang setelah kita menyelesaikannya, mari kita terus bekerja dengan perpustakaan BeautifulSoup.

Kami akan menggunakan beberapa kaedah dan atribut yang akan kami panggil pada objek BeautifulSoup kami. Namun, kami perlu menguraikan rentetan kami menggunakan BeautifulSoup dan kemudian menetapkan ke variabel "our_soup".

dari bs4 import BeautifulSoup sebagai bso
our_soup = bso (contoh_content, "lxml")

Sejauh ini, kami akan bekerjasama dengan pemboleh ubah “our_soup” dan memanggil semua atribut atau kaedah kami di atasnya.

Pada nota ringkas, jika anda belum mengetahui apa itu simpul anak, pada dasarnya adalah simpul (tag) yang terdapat di dalam nod lain. Dalam coretan HTML kami misalnya, tag li adalah node anak-anak dari tag "ul" dan "ol".

Berikut adalah kaedah yang akan kita perhatikan:

cariChild ():

The cariChild kaedah digunakan untuk mencari simpul anak pertama elemen HTML. Contohnya apabila kita melihat tag "ol" atau "ul" kita, kita akan mendapat dua tanda anak di dalamnya. Tetapi apabila kita menggunakan cariChild kaedah, ia hanya mengembalikan nod pertama sebagai nod anak.

Kaedah ini mungkin terbukti sangat berguna ketika kita hanya ingin mendapatkan simpul anak pertama elemen HTML, kerana ia segera mengembalikan hasil yang diperlukan.

Objek yang dikembalikan adalah jenisnya bs4.unsur.Tag. Kita boleh mengekstrak teks daripadanya dengan memanggil atribut teks di atasnya.

Inilah contohnya:

first_child = kumpulan_kami.cari ("badan").cari ("ol")
cetak (anak pertama.cariAnak ())

Kod di atas akan mengembalikan yang berikut:

  • Nombor satu
  • Untuk mendapatkan teks dari tag, kami memanggil teks atribut di atasnya.

    Seperti:

    cetak (anak pertama.cariAnak ().teks)

    Untuk mendapatkan hasil berikut:

    'Nombor satu'
    cari Kanak-kanak ():

    Kami telah melihat di cariChild kaedah dan melihat bagaimana ia berfungsi. The cari Kanak-kanak kaedah berfungsi dengan cara yang serupa, namun seperti namanya, tidak hanya terdapat satu simpul anak, tetapi semua nod kanak-kanak akan mendapat tag.

    Apabila anda perlu memasukkan semua nod kanak-kanak dalam tag, cari Kanak-kanak kaedah adalah cara untuk pergi. Kaedah ini mengembalikan semua nod kanak-kanak dalam senarai, anda boleh mengakses tag pilihan anda menggunakan nombor indeksnya.

    Inilah contohnya:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (anak pertama.cariAnak ())

    Ini akan mengembalikan nod kanak-kanak dalam senarai:

    [
  • Nombor satu
  • ,
  • Nombor dua
  • ]

    Untuk mendapatkan simpul anak kedua dalam senarai, kod berikut akan melakukan tugas:

    cetak (anak pertama.cari Kanak-kanak () [1])

    Untuk mendapatkan hasil berikut:

  • Nombor dua
  • Itu semua yang disediakan oleh BeautifulSoup mengenai kaedah. Namun, ia tidak berakhir di sana. Atribut juga boleh dipanggil pada objek BeautifulSoup kami untuk mendapatkan simpul anak / anak / keturunan dari elemen HTML.

    kandungan:

    Sementara cari Kanak-kanak kaedah melakukan kerja mudah untuk mengekstrak nod kanak-kanak, yang kandungan atribut melakukan sesuatu yang sedikit berbeza.

    The kandungan atribut mengembalikan senarai semua kandungan dalam elemen HTML, termasuk nod kanak-kanak. Oleh itu, apabila anda memanggil kandungan atribut pada objek BeautifulSoup, ia akan mengembalikan teks sebagai rentetan dan simpul dalam tag sebagai bs4.unsur.Tag objek.

    Inilah contohnya:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (anak pertama.kandungan)

    Ini mengembalikan perkara berikut:

    ["\ n Berikut adalah senarai yang dipesan \ n",
  • Nombor satu
  • ,
    '\ n',
  • Nombor dua
  • , '\ n']

    Seperti yang anda lihat, senarai tersebut mengandungi teks yang muncul sebelum simpul anak, simpul anak dan teks yang muncul selepas simpul anak.

    Untuk mengakses simpul anak kedua, yang perlu kita lakukan adalah menggunakan nombor indeksnya seperti yang ditunjukkan di bawah:

    cetak (anak pertama.kandungan [3])

    Ini akan mengembalikan perkara berikut:

  • Nombor dua
  • kanak-kanak:

    Berikut adalah satu atribut yang hampir sama dengan atribut kandungan. Namun, ia mempunyai satu perbezaan kecil yang dapat memberi kesan besar (bagi mereka yang memandang serius pengoptimuman kod).

    Atribut anak-anak juga mengembalikan teks yang muncul sebelum simpul anak, simpul anak itu sendiri dan teks yang muncul selepas simpul anak. Perbezaannya di sini adalah bahawa ia mengembalikannya sebagai penjana dan bukannya senarai.

    Mari kita lihat contoh berikut:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (anak pertama.kanak-kanak)

    Kod di atas memberikan hasil berikut (alamat di mesin anda tidak perlu dihitung dengan yang di bawah):

    Seperti yang anda lihat, ia hanya mengembalikan alamat generator. Kita boleh menukar penjana ini menjadi senarai.

    Kita dapat melihatnya dalam contoh di bawah:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (senarai (anak pertama).kanak-kanak))

    Ini memberikan hasil berikut:

    ["\ n Berikut adalah senarai yang dipesan \ n",
  • Nombor satu
  • ,
    '\ n',
  • Nombor dua
  • , '\ n']

    keturunan:

    Sementara kanak-kanak atribut berfungsi untuk mendapatkan hanya kandungan di dalam tag i.e. teks, dan nod pada tahap pertama, the keturunan atribut semakin mendalam dan melakukan lebih banyak perkara.

    The keturunan atribut mendapat semua teks dan nod yang terdapat pada nod kanak-kanak. Oleh itu ia tidak mengembalikan node anak-anak, ia juga mengembalikan node cucu.

    Selain mengembalikan teks dan tag, ia juga mengembalikan kandungan dalam tag sebagai rentetan.

    Sama seperti kanak-kanak atribut, keturunan mengembalikan hasilnya sebagai penjana.

    Kita dapat melihatnya di bawah:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (anak pertama.keturunan)

    Ini memberikan hasil berikut:

    Seperti yang dilihat sebelumnya, kita kemudian dapat menukar objek penjana ini menjadi senarai:

    first_child = kumpulan_kami.cari ("badan").cari ("ol")
    cetak (senarai (anak pertama).keturunan))

    Kami akan mendapatkan senarai di bawah:

    ["\ n Berikut adalah senarai yang dipesan \ n",
  • Nombor satu
  • ,
    'Nombor Satu', '\ n',
  • Nombor dua
  • , 'Nombor Dua', '\ n']

    Kesimpulannya

    Di sana anda memilikinya, lima cara berbeza untuk mengakses nod kanak-kanak dalam elemen HTML. Mungkin ada lebih banyak cara, namun dengan kaedah dan atribut yang dibahas dalam artikel ini, seseorang harus dapat mengakses simpul anak dari elemen HTML apa pun.

    Vulkan untuk Pengguna Linux
    Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
    OpenTTD vs Simutrans
    Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
    Tutorial OpenTTD
    OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...