Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Saya coding bersama dengan kuliah. Ketika saya menarik kode dari situs web memang dengan URL yang tepat menggunakan git. perintah url. Itu menarik posting yang tidak ada di halaman. Ada ide tentang apa ini?


Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Martin Breuss Tim RP di

Hai @jcool78758, saya tidak begitu mengerti apa yang Anda maksud dengan

menggunakan git. url

Sulit untuk mengatakan apa yang Anda lihat hanya dari apa yang Anda tulis. Anda dapat memposting kode Anda dan hasil yang Anda peroleh mengejutkan, maka saya mungkin dapat membantu

Saran saya adalah mencoba memeriksa situs web yang memang benar dan mencari beberapa teks yang ada di postingan yang tidak Anda duga. Lihat apakah Anda dapat menemukannya di HTML asli, seharusnya ada di suatu tempat. )

jcool78758 di

Tebakan saya yang berpendidikan adalah ada sesuatu di situs web yang sebenarnya karena ada kode yang berfungsi dengan baik di situs monster. Apakah ada cara saya bisa melampirkan file tangkapan layar dan. py dari notebook Jupyter ke komentar ini?

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Martin Breuss Tim RP di

Hai lagi, Anda tidak dapat melampirkan gambar di sini, tetapi Anda dapat mengunggahnya ke layanan hosting, mis. g. Google Drive, lalu tambahkan tautan di komentar ini

Anda juga dapat menambahkan tautan ke repo GitHub tempat Anda menyimpan kode, atau menambahkan potongan kode di sini. Jika ya, ingatlah untuk memformatnya sebagai kode

Apakah Anda mengikuti saran saya dan mencari konten situs web memang untuk melihat apakah konten yang mengejutkan muncul, dan di mana?

Perlu diingat juga bahwa kode persis yang berfungsi untuk situs Monster pasti tidak akan berfungsi untuk situs Memang. Mereka dibangun dengan HTML yang berbeda, sehingga setiap pengikis harus bekerja untuk struktur situs tertentu

Pengikisan web adalah proses pengumpulan dan penguraian data mentah dari Web, dan komunitas Python telah menghasilkan beberapa alat pengikis web yang cukup kuat

Internet host mungkin sumber informasi terbesar di planet ini. Banyak disiplin ilmu, seperti ilmu data, intelijen bisnis, dan pelaporan investigasi, dapat memperoleh manfaat besar dari pengumpulan dan analisis data dari situs web

Dalam tutorial ini, Anda akan mempelajari caranya

  • Parsing data situs web menggunakan metode string dan ekspresi reguler
  • Parsing data situs web menggunakan parser HTML
  • Berinteraksi dengan formulir dan komponen situs web lainnya

Catatan. Tutorial ini diadaptasi dari bab “Berinteraksi Dengan Web” di Python Basics. Pengantar Praktis untuk Python 3

Buku ini menggunakan editor IDLE bawaan Python untuk membuat dan mengedit file Python dan berinteraksi dengan shell Python, jadi Anda akan melihat referensi sesekali ke IDLE di sepanjang tutorial ini. Namun, Anda seharusnya tidak mengalami masalah dalam menjalankan kode contoh dari editor dan lingkungan pilihan Anda

Kode sumber. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk mengumpulkan dan mengurai data dari Web

Mengikis dan Mengurai Teks Dari Situs Web

Mengumpulkan data dari situs web menggunakan proses otomatis dikenal sebagai web scraping. Beberapa situs web secara eksplisit melarang pengguna mengorek data mereka dengan alat otomatis seperti yang akan Anda buat di tutorial ini. Situs web melakukan ini karena dua kemungkinan alasan

  1. Situs ini memiliki alasan bagus untuk melindungi datanya. Misalnya, Google Maps tidak mengizinkan Anda meminta terlalu banyak hasil terlalu cepat
  2. Membuat banyak permintaan berulang ke server situs web dapat menggunakan bandwidth, memperlambat situs web untuk pengguna lain, dan berpotensi membebani server sehingga situs web berhenti merespons sepenuhnya

Sebelum menggunakan keterampilan Python Anda untuk pengikisan web, Anda harus selalu memeriksa kebijakan penggunaan yang dapat diterima situs web target Anda untuk melihat apakah mengakses situs web dengan alat otomatis merupakan pelanggaran terhadap ketentuan penggunaannya. Secara hukum, pengikisan web yang bertentangan dengan keinginan situs web adalah area abu-abu

Penting. Perlu diketahui bahwa teknik berikut saat digunakan di situs web yang melarang pengikisan web

Untuk tutorial ini, Anda akan menggunakan halaman yang dihosting di server Real Python. Halaman yang akan Anda akses telah disiapkan untuk digunakan dengan tutorial ini

Sekarang setelah Anda membaca penafian, Anda bisa mendapatkan hal-hal yang menyenangkan. Di bagian selanjutnya, Anda akan mulai mengambil semua kode HTML dari satu halaman web

Hilangkan iklan

Bangun Pengikis Web Pertama Anda

Satu paket berguna untuk pengikisan web yang dapat Anda temukan di pustaka standar Python adalah

>>> title_index = html.find("<title>")
>>> title_index
14
6, yang berisi alat untuk bekerja dengan URL. Secara khusus, modul
>>> title_index = html.find("<title>")
>>> title_index
14
_7 berisi fungsi yang disebut
>>> title_index = html.find("<title>")
>>> title_index
14
8 yang dapat Anda gunakan untuk membuka URL dalam program

Di jendela interaktif IDLE, ketik berikut ini untuk mengimpor

>>> title_index = html.find("<title>")
>>> title_index
14
8

>>>

>>> from urllib.request import urlopen
_

Halaman web yang akan Anda buka ada di URL berikut

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_

Untuk membuka halaman web, berikan

>>> start_index = title_index + len("<title>")
>>> start_index
21
_0 ke
>>> title_index = html.find("<title>")
>>> title_index
14
8

>>>

>>> page = urlopen(url)
_

>>> title_index = html.find("<title>")
>>> title_index
14
_8 mengembalikan objek
>>> start_index = title_index + len("<title>")
>>> start_index
21
3

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_

Untuk mengekstrak HTML dari halaman, pertama-tama gunakan metode

>>> start_index = title_index + len("<title>")
>>> start_index
21
3 objek
>>> start_index = title_index + len("<title>")
>>> start_index
21
5 , yang mengembalikan urutan byte. Kemudian gunakan
>>> start_index = title_index + len("<title>")
>>> start_index
21
_6 untuk mendekode byte menjadi string menggunakan

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_

Sekarang Anda dapat mencetak HTML untuk melihat konten halaman web

>>>

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
_

Keluaran yang Anda lihat adalah kode HTML situs web, yang dirender browser Anda saat Anda mengunjungi

>>> start_index = title_index + len("<title>")
>>> start_index
21
7

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Dengan

>>> title_index = html.find("<title>")
>>> title_index
14
_6, Anda mengakses situs web dengan cara yang sama seperti yang Anda lakukan di browser. Namun, alih-alih merender konten secara visual, Anda mengambil kode sumber sebagai teks. Sekarang setelah Anda memiliki HTML sebagai teks, Anda dapat mengekstrak informasi darinya dengan beberapa cara berbeda

Ekstrak Teks Dari HTML Dengan Metode String

Salah satu cara untuk mengekstrak informasi dari HTML halaman web adalah dengan menggunakan. Misalnya, Anda dapat menggunakan

>>> start_index = title_index + len("<title>")
>>> start_index
21
_9 untuk menelusuri teks HTML untuk tag
>>> end_index = html.find("</title>")
>>> end_index
39
0 dan mengekstrak judul halaman web

Untuk memulai, Anda akan mengekstrak judul halaman web yang Anda minta pada contoh sebelumnya. Jika Anda mengetahui indeks karakter pertama judul dan indeks karakter pertama tag

>>> end_index = html.find("</title>")
>>> end_index
39
1 penutup, maka Anda dapat menggunakan a untuk mengekstrak judul

Karena

>>> start_index = title_index + len("<title>")
>>> start_index
21
_9 mengembalikan indeks kemunculan pertama substring, Anda bisa mendapatkan indeks dari tag
>>> end_index = html.find("</title>")
>>> end_index
39
0 pembuka dengan meneruskan string
>>> end_index = html.find("</title>")
>>> end_index
39
4 ke
>>> start_index = title_index + len("<title>")
>>> start_index
21
9

>>>

>>> title_index = html.find("<title>")
>>> title_index
14
_

Anda tidak menginginkan indeks dari tag

>>> end_index = html.find("</title>")
>>> end_index
39
0. Anda ingin indeks dari judul itu sendiri. Untuk mendapatkan indeks huruf pertama pada judul, Anda dapat menambahkan panjang string
>>> end_index = html.find("</title>")
>>> end_index
39
4 menjadi
>>> end_index = html.find("</title>")
>>> end_index
39
8

>>>

>>> start_index = title_index + len("<title>")
>>> start_index
21
_

Sekarang dapatkan indeks dari tag

>>> end_index = html.find("</title>")
>>> end_index
39
_1 penutup dengan meneruskan string
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
0 ke
>>> start_index = title_index + len("<title>")
>>> start_index
21
9

>>>

>>> end_index = html.find("</title>")
>>> end_index
39
_

Terakhir, Anda dapat mengekstrak judul dengan memotong string

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
2

>>>_______ 33 ________

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'

HTML dunia nyata bisa jauh lebih rumit dan jauh lebih sulit diprediksi daripada HTML di halaman profil Aphrodite. Inilah halaman profil lain dengan beberapa HTML yang lebih berantakan yang dapat Anda gosok

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
0

Coba ekstrak judul dari URL baru ini menggunakan metode yang sama seperti pada contoh sebelumnya

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
1

Ups. Ada sedikit campuran HTML dengan judulnya. Kenapa begitu?

HTML untuk halaman

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
3 terlihat mirip dengan halaman
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
4, tetapi ada sedikit perbedaan. Tag
>>> end_index = html.find("</title>")
>>> end_index
39
0 pembuka memiliki spasi ekstra sebelum kurung sudut penutup (
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
6), menjadikannya sebagai
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
7

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
_8 mengembalikan
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
9 karena substring yang tepat
>>> end_index = html.find("</title>")
>>> end_index
39
4 tidak ada. Ketika
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
_9 ditambahkan ke
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
02, yaitu
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
03, variabel
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
04 diberi nilai
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
05

Karakter pada indeks

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
05 dari string
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
2 adalah karakter baris baru (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
08) tepat sebelum braket sudut bukaan (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
09) dari tag
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
10. Ini berarti bahwa
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_11 mengembalikan semua HTML yang dimulai dengan baris baru itu dan diakhiri tepat sebelum tag
>>> end_index = html.find("</title>")
>>> end_index
39
1

Masalah semacam ini dapat terjadi dengan cara yang tak terduga yang tak terhitung jumlahnya. Anda memerlukan cara yang lebih andal untuk mengekstrak teks dari HTML

Hilangkan iklan

Kenali Ekspresi Reguler

Ekspresi reguler—atau singkatnya regex—adalah pola yang dapat Anda gunakan untuk mencari teks dalam string. Python mendukung ekspresi reguler melalui modul

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
13 pustaka standar

Catatan. Ekspresi reguler tidak khusus untuk Python. Mereka adalah konsep pemrograman umum dan didukung dalam banyak bahasa pemrograman

Untuk bekerja dengan ekspresi reguler, hal pertama yang perlu Anda lakukan adalah mengimpor modul

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
13

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
2

Ekspresi reguler menggunakan karakter khusus yang disebut metakarakter untuk menunjukkan pola yang berbeda. Misalnya, karakter asterisk (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15) singkatan nol atau lebih contoh apa pun yang datang tepat sebelum asterisk

Dalam contoh berikut, Anda menggunakan

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_16 untuk menemukan teks apa pun di dalam string yang cocok dengan ekspresi reguler tertentu

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
3

Argumen pertama dari

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_17 adalah ekspresi reguler yang ingin Anda cocokkan, dan argumen kedua adalah string yang akan diuji. Dalam contoh di atas, Anda mencari pola
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
18 dalam string
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19

Ekspresi reguler

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
18 cocok dengan bagian mana pun dari string yang dimulai dengan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21, diakhiri dengan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22, dan memiliki nol atau lebih contoh
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
23 di antara keduanya.
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_17 mengembalikan daftar semua kecocokan. String
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_19 cocok dengan pola ini, sehingga dikembalikan dalam daftar

Berikut pola yang sama diterapkan pada string yang berbeda

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
4

Perhatikan bahwa jika tidak ditemukan kecocokan, maka

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
16 mengembalikan daftar kosong

Pencocokan pola peka huruf besar-kecil. Jika Anda ingin mencocokkan pola ini terlepas dari kasusnya, Anda dapat memberikan argumen ketiga dengan nilai

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
27

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
5

Anda dapat menggunakan titik (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_28) untuk mewakili karakter tunggal apa pun dalam ekspresi reguler. Misalnya, Anda dapat menemukan semua string yang berisi huruf
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 dan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22 dipisahkan oleh satu karakter sebagai berikut

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
6

Pola

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_31 di dalam ekspresi reguler berarti karakter apa pun yang diulang beberapa kali. Misalnya, Anda dapat menggunakan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_32 untuk menemukan setiap substring yang dimulai dengan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 dan diakhiri dengan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22, terlepas dari huruf—atau huruf—yang ada di antaranya

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
7

Seringkali, Anda menggunakan

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_35 untuk mencari pola tertentu di dalam string. Fungsi ini agak lebih rumit daripada
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
17 karena mengembalikan objek bernama
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
37 yang menyimpan berbagai kelompok data. Ini karena mungkin ada kecocokan di dalam kecocokan lainnya, dan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
35 mengembalikan setiap kemungkinan hasil

Detail

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_37 tidak relevan di sini. Untuk saat ini, ketahuilah bahwa memanggil
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_40 di
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
37 akan mengembalikan hasil pertama dan paling inklusif, yang dalam kebanyakan kasus adalah yang Anda inginkan

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
8

Ada satu fungsi lagi di modul

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_13 yang berguna untuk mengurai teks. , yang merupakan kependekan dari pengganti, memungkinkan Anda mengganti teks dalam string yang cocok dengan ekspresi reguler dengan teks baru. Ini berperilaku seperti metode string
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_44

Argumen yang diteruskan ke

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_43 adalah ekspresi reguler, diikuti dengan teks pengganti, diikuti dengan string. Ini sebuah contoh

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
9

Mungkin itu tidak seperti yang Anda harapkan terjadi

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_43 menggunakan ekspresi reguler
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
47 untuk menemukan dan mengganti semuanya antara
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
09 pertama dan
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
6 terakhir, yang membentang dari awal
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
50 hingga akhir
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
51. Ini karena ekspresi reguler Python rakus, artinya mereka mencoba menemukan kecocokan yang paling lama saat karakter seperti
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15 digunakan

Sebagai alternatif, Anda dapat menggunakan pola pencocokan non-greedy

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
53, yang bekerja dengan cara yang sama seperti
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15 kecuali cocok dengan string teks sesingkat mungkin

>>>

>>> page = urlopen(url)
0

Kali ini,

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_43 menemukan dua kecocokan,
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
50 dan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
51, dan mengganti string
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
58 untuk kedua kecocokan

Hilangkan iklan

Ekstrak Teks Dari HTML Dengan Ekspresi Reguler

Berbekal semua pengetahuan ini, sekarang coba parsing judul dari halaman profil lain, yang menyertakan baris HTML yang ditulis dengan agak asal-asalan ini

>>> page = urlopen(url)
_1

Metode

>>> start_index = title_index + len("<title>")
>>> start_index
21
_9 akan mengalami kesulitan menangani ketidakkonsistenan di sini, tetapi dengan penggunaan ekspresi reguler yang cerdik, Anda dapat menangani kode ini dengan cepat dan efisien

>>> page = urlopen(url)
_2

Perhatikan lebih dekat ekspresi reguler pertama dalam string

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
60 dengan memecahnya menjadi tiga bagian

  1. >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    _61 cocok dengan tag pembuka
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    62 di
    >>> title = html[start_index:end_index]
    >>> title
    'Profile: Aphrodite'
    
    2. Bagian
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    64 cocok dengan
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    65 karena
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    35 disebut dengan
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    27, dan
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    68 cocok dengan teks apa pun setelah
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    65 hingga contoh pertama
    >>> title = html[start_index:end_index]
    >>> title
    'Profile: Aphrodite'
    
    6

  2. >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    _71 dengan tidak rakus mencocokkan semua teks setelah pembukaan
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    62, berhenti di pertandingan pertama untuk
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    73

  3. >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    _73 berbeda dari pola pertama hanya dalam penggunaan
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    75 karakter, sehingga cocok dengan penutup
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    76 tag di
    >>> title = html[start_index:end_index]
    >>> title
    'Profile: Aphrodite'
    
    2

Ekspresi reguler kedua, string

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_78, juga menggunakan non-greedy
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
71 untuk mencocokkan semua tag HTML dalam string
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
80. Dengan mengganti kecocokan apa pun dengan
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_81,
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
43 menghapus semua tag dan hanya mengembalikan teks

Catatan. Pengikisan web dengan Python atau bahasa lainnya bisa membosankan. Tidak ada dua situs web yang diatur dengan cara yang sama, dan HTML seringkali berantakan. Selain itu, situs web berubah seiring waktu. Pengikis web yang berfungsi hari ini tidak dijamin berfungsi tahun depan—atau minggu depan, dalam hal ini

Ekspresi reguler adalah alat yang ampuh bila digunakan dengan benar. Dalam pengantar ini, Anda baru saja menggores permukaannya. Untuk informasi selengkapnya tentang ekspresi reguler dan cara menggunakannya, lihat seri Dua Bagian Ekspresi Reguler. Regex dengan Python

Periksa Pemahaman Anda

Perluas blok di bawah untuk memeriksa pemahaman Anda

Latihan. Mengikis Data Dari Situs WebTampilkan/Sembunyikan

Tulis sebuah program yang mengambil HTML lengkap dari URL berikut

>>>

>>> page = urlopen(url)
3

Kemudian gunakan

>>> start_index = title_index + len("<title>")
>>> start_index
21
_9 untuk menampilkan teks berikut Nama. dan Warna Favorit. (tidak termasuk spasi awal atau tag HTML akhir yang mungkin muncul di baris yang sama)

Anda dapat memperluas blok di bawah ini untuk melihat solusinya

Solusi. Mengikis Data Dari Situs WebTampilkan/Sembunyikan

Pertama, impor fungsi

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_84 dari modul
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
85

>>> page = urlopen(url)
_4

Kemudian buka URL dan gunakan metode

>>> start_index = title_index + len("<title>")
>>> start_index
21
5 dari objek
>>> start_index = title_index + len("<title>")
>>> start_index
21
3 yang dikembalikan oleh
>>> title_index = html.find("<title>")
>>> title_index
14
8 untuk membaca HTML halaman

>>> page = urlopen(url)
_5

Metode

>>> start_index = title_index + len("<title>")
>>> start_index
21
_5 mengembalikan string byte, jadi Anda menggunakan
>>> start_index = title_index + len("<title>")
>>> start_index
21
6 untuk mendekode byte menggunakan pengkodean UTF-8

Sekarang setelah Anda memiliki sumber HTML halaman web sebagai string yang ditetapkan ke variabel

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
91, Anda dapat mengekstrak nama dan warna favorit Dionysus dari profilnya. Struktur HTML untuk profil Dionysus sama dengan profil Aphrodite yang Anda lihat sebelumnya

Anda bisa mendapatkan nama dengan menemukan string

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_92 dalam teks dan mengekstrak semua yang muncul setelah kemunculan string pertama dan sebelum tag HTML berikutnya. Artinya, Anda perlu mengekstrak semuanya setelah tanda titik dua (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
93) dan sebelum tanda kurung sudut pertama (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
09). Anda dapat menggunakan teknik yang sama untuk mengekstrak warna favorit

Loop

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_95 berikut mengekstraksi teks ini untuk nama dan warna favorit

>>> page = urlopen(url)
_6

Sepertinya ada banyak hal yang terjadi dalam perulangan

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
95 ini, tetapi ini hanya sedikit aritmatika untuk menghitung indeks yang tepat untuk mengekstraksi teks yang diinginkan. Silakan dan hancurkan

  1. Anda menggunakan

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    _97 untuk menemukan indeks awal string, baik
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    92 atau
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    99, lalu menetapkan indeks ke
    >>> page = urlopen(url)
    
    00

  2. Karena teks yang akan diekstraksi dimulai tepat setelah titik dua di

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    92 atau
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    99, Anda mendapatkan indeks karakter segera setelah titik dua dengan menambahkan panjang string ke
    >>> page = urlopen(url)
    
    03, lalu menetapkan hasilnya ke
    >>> page = urlopen(url)
    
    04

  3. Anda menghitung indeks akhir teks yang akan diekstraksi dengan menentukan indeks braket sudut pertama (

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    09) relatif terhadap
    >>> page = urlopen(url)
    
    04 dan menetapkan nilai ini ke
    >>> page = urlopen(url)
    
    07. Kemudian Anda menambahkan nilai itu ke
    >>> page = urlopen(url)
    
    _04 dan menetapkan hasilnya ke
    >>> page = urlopen(url)
    
    09

  4. Anda mengekstrak teks dengan mengiris

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    _91 dari
    >>> page = urlopen(url)
    
    04 ke
    >>> page = urlopen(url)
    
    09 dan menetapkan string ini ke
    >>> page = urlopen(url)
    
    13

  5. Anda menghapus spasi apa pun dari awal dan akhir

    >>> page = urlopen(url)
    
    13 menggunakan
    >>> page = urlopen(url)
    
    15 dan menetapkan hasilnya ke
    >>> page = urlopen(url)
    
    16

Di akhir perulangan, Anda menggunakan

>>> page = urlopen(url)
_17 untuk menampilkan teks yang diekstraksi. Hasil akhir terlihat seperti ini

>>> page = urlopen(url)
_7

Solusi ini adalah salah satu dari banyak yang memecahkan masalah ini, jadi jika Anda mendapatkan hasil yang sama dengan solusi yang berbeda, maka Anda melakukannya dengan baik

Saat Anda siap, Anda dapat melanjutkan ke bagian berikutnya

Gunakan Parser HTML untuk Pengikisan Web dengan Python

Meskipun ekspresi reguler bagus untuk pencocokan pola secara umum, terkadang lebih mudah menggunakan parser HTML yang secara eksplisit dirancang untuk mengurai halaman HTML. Ada banyak alat Python yang ditulis untuk tujuan ini, tetapi perpustakaan Beautiful Soup adalah yang bagus untuk memulai

Instal Sup Cantik

Untuk menginstal Beautiful Soup, Anda dapat menjalankan perintah berikut di terminal Anda

>>> page = urlopen(url)
_8

Dengan perintah ini, Anda menginstal versi terbaru dari Beautiful Soup ke dalam lingkungan global Python Anda

Hilangkan iklan

Buat Objek >>> page = urlopen(url) _18

Ketik program berikut ke jendela editor baru

>>> page = urlopen(url)
_9

Program ini melakukan tiga hal

  1. Membuka URL

    >>> page = urlopen(url)
    
    19 dengan menggunakan
    >>> title_index = html.find("<title>")
    >>> title_index
    14
    
    8 dari modul
    >>> title_index = html.find("<title>")
    >>> title_index
    14
    
    7

  2. Membaca HTML dari halaman sebagai string dan menugaskannya ke variabel

    >>> title = html[start_index:end_index]
    >>> title
    'Profile: Aphrodite'
    
    2

  3. Membuat objek

    >>> page = urlopen(url)
    
    _18 dan menugaskannya ke variabel
    >>> page = urlopen(url)
    
    24

Objek

>>> page = urlopen(url)
18 yang ditugaskan ke
>>> page = urlopen(url)
24 dibuat dengan dua argumen. Argumen pertama adalah HTML yang akan diuraikan, dan argumen kedua, string
>>> page = urlopen(url)
27, memberi tahu objek parser mana yang akan digunakan di belakang layar.
>>> page = urlopen(url)
_27 mewakili parser HTML bawaan Python

Gunakan Objek >>> page = urlopen(url) _18

Simpan dan jalankan program di atas. Setelah selesai dijalankan, Anda dapat menggunakan variabel

>>> page = urlopen(url)
24 di jendela interaktif untuk mengurai konten
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
2 dengan berbagai cara

Catatan. Jika Anda tidak menggunakan IDLE, maka Anda dapat menjalankan program Anda dengan bendera

>>> page = urlopen(url)
32 untuk masuk ke mode interaktif. Sesuatu seperti
>>> page = urlopen(url)
_33 pertama-tama akan menjalankan program Anda dan kemudian meninggalkan Anda di REPL tempat Anda dapat menjelajahi objek Anda

Misalnya, objek

>>> page = urlopen(url)
_18 memiliki metode
>>> page = urlopen(url)
35 yang dapat Anda gunakan untuk mengekstrak semua teks dari dokumen dan secara otomatis menghapus semua tag HTML

Ketik kode berikut ke jendela interaktif IDLE atau di akhir kode di editor Anda

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
0

Ada banyak baris kosong dalam keluaran ini. Ini adalah hasil dari karakter baris baru dalam teks dokumen HTML. Anda dapat menghapusnya dengan metode string

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_44 jika perlu

Seringkali, Anda hanya perlu mendapatkan teks tertentu dari dokumen HTML. Menggunakan Beautiful Soup terlebih dahulu untuk mengekstrak teks dan kemudian menggunakan metode string

>>> start_index = title_index + len("<title>")
>>> start_index
21
9 terkadang lebih mudah daripada bekerja dengan ekspresi reguler

Namun, terkadang tag HTML itu sendiri adalah elemen yang menunjukkan data yang ingin Anda ambil. Misalnya, mungkin Anda ingin mengambil URL untuk semua gambar di halaman. Tautan ini terdapat dalam atribut

>>> page = urlopen(url)
_38 dari
>>> page = urlopen(url)
39 tag HTML

Dalam hal ini, Anda dapat menggunakan

>>> page = urlopen(url)
_40 untuk mengembalikan daftar semua instance dari tag tertentu itu

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
1

Ini mengembalikan daftar semua

>>> page = urlopen(url)
_39 tag dalam dokumen HTML. Objek dalam daftar terlihat seperti string yang mewakili tag, tetapi sebenarnya itu adalah instance dari objek
>>> page = urlopen(url)
42 yang disediakan oleh Beautiful Soup.
>>> page = urlopen(url)
_42 objek menyediakan antarmuka sederhana untuk bekerja dengan informasi yang dikandungnya

Anda dapat menjelajahi ini sedikit dengan terlebih dahulu membongkar

>>> page = urlopen(url)
42 objek dari daftar

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
2

Setiap objek

>>> page = urlopen(url)
_42 memiliki properti
>>> page = urlopen(url)
46 yang mengembalikan string yang berisi jenis tag HTML

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
3

Anda dapat mengakses atribut HTML dari objek

>>> page = urlopen(url)
42 dengan meletakkan nama mereka di antara tanda kurung siku, sama seperti jika atribut adalah kunci dalam kamus

Misalnya, tag

>>> page = urlopen(url)
_48 memiliki satu atribut,
>>> page = urlopen(url)
38, dengan nilai
>>> page = urlopen(url)
50. Demikian pula, tag HTML seperti tautan
>>> page = urlopen(url)
51 memiliki dua atribut,
>>> page = urlopen(url)
52 dan
>>> page = urlopen(url)
53

Untuk mendapatkan sumber gambar di halaman profil Dionysus, Anda mengakses atribut

>>> page = urlopen(url)
38 menggunakan notasi kamus yang disebutkan di atas

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
4

Tag tertentu dalam dokumen HTML dapat diakses oleh properti dari objek

>>> page = urlopen(url)
42. Misalnya, untuk mendapatkan tag
>>> end_index = html.find("</title>")
>>> end_index
39
_0 dalam dokumen, Anda dapat menggunakan properti
>>> page = urlopen(url)
57

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
5

Jika Anda melihat sumber profil Dionysus dengan menavigasi ke halaman profil, mengklik kanan halaman, dan memilih Lihat sumber halaman, Anda akan melihat bahwa tag

>>> end_index = html.find("</title>")
>>> end_index
39
0 ditulis dengan huruf besar semua dengan spasi

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Beautiful Soup secara otomatis membersihkan tag untuk Anda dengan menghapus spasi ekstra di tag pembuka dan garis miring asing (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
75) di tag penutup

Anda juga dapat mengambil hanya string antara tag judul dengan properti

>>> page = urlopen(url)
60 dari objek
>>> page = urlopen(url)
42

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
6

Salah satu fitur Beautiful Soup adalah kemampuan untuk mencari jenis tag tertentu yang atributnya sesuai dengan nilai tertentu. Misalnya, jika Anda ingin menemukan semua tag

>>> page = urlopen(url)
39 yang memiliki atribut ________9______38 sama dengan nilai
>>> page = urlopen(url)
64, maka Anda dapat memberikan argumen tambahan berikut ke
>>> page = urlopen(url)
65

>>> ________12______7

Contoh ini agak sewenang-wenang, dan kegunaan teknik ini mungkin tidak terlihat dari contoh tersebut. Jika Anda menghabiskan waktu menjelajahi berbagai situs web dan melihat sumber halamannya, Anda akan melihat bahwa banyak situs web memiliki struktur HTML yang sangat rumit

Saat mengorek data dari situs web dengan Python, Anda sering kali tertarik pada bagian tertentu dari halaman tersebut. Dengan meluangkan waktu melihat-lihat dokumen HTML, Anda dapat mengidentifikasi tag dengan atribut unik yang dapat Anda gunakan untuk mengekstrak data yang Anda butuhkan

Kemudian, alih-alih mengandalkan ekspresi reguler yang rumit atau menggunakan

>>> start_index = title_index + len("<title>")
>>> start_index
21
9 untuk menelusuri dokumen, Anda dapat langsung mengakses tag tertentu yang Anda minati dan mengekstrak data yang Anda perlukan

Dalam beberapa kasus, Anda mungkin menemukan bahwa Beautiful Soup tidak menawarkan fungsionalitas yang Anda butuhkan. Pustaka agak sulit untuk memulai tetapi menawarkan fleksibilitas yang jauh lebih banyak daripada Beautiful Soup untuk mem-parsing dokumen HTML. Anda mungkin ingin memeriksanya setelah merasa nyaman menggunakan Beautiful Soup

Catatan. Pengurai HTML seperti Beautiful Soup dapat menghemat banyak waktu dan tenaga Anda saat menemukan data tertentu di halaman web. Namun, kadang-kadang HTML ditulis dengan sangat buruk dan tidak teratur bahkan pengurai canggih seperti Beautiful Soup tidak dapat menafsirkan tag HTML dengan benar

Dalam hal ini, Anda sering menggunakan

>>> start_index = title_index + len("<title>")
>>> start_index
21
9 dan teknik ekspresi reguler untuk mencoba mengurai informasi yang Anda perlukan

Beautiful Soup bagus untuk mengorek data dari HTML situs web, tetapi tidak menyediakan cara apa pun untuk bekerja dengan formulir HTML. Misalnya, jika Anda perlu menelusuri beberapa kueri di situs web lalu mengorek hasilnya, maka Beautiful Soup saja tidak akan membantu Anda terlalu jauh.

Hilangkan iklan

Periksa Pemahaman Anda

Perluas blok di bawah untuk memeriksa pemahaman Anda

Latihan. Parsing HTML Dengan Sup CantikTampilkan/Sembunyikan

Tulis sebuah program yang mengambil HTML lengkap dari halaman di URL

>>> page = urlopen(url)
68

Menggunakan Beautiful Soup, cetak daftar semua tautan di halaman dengan mencari tag HTML dengan nama

>>> page = urlopen(url)
69 dan ambil nilai yang diambil oleh atribut
>>> page = urlopen(url)
52 dari setiap tag

Hasil akhir akan terlihat seperti ini

>>> page
<http.client.HTTPResponse object at 0x105fef820>
8

Pastikan Anda hanya memiliki satu garis miring (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
75) antara URL dasar dan URL relatif

Anda dapat memperluas blok di bawah ini untuk melihat solusinya

Solusi. Parsing HTML Dengan Sup CantikTampilkan/Sembunyikan

Pertama, impor fungsi

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
_84 dari modul
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
85 dan kelas
>>> page = urlopen(url)
18 dari paket
>>> page = urlopen(url)
75

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_9

Setiap URL tautan pada halaman

>>> page = urlopen(url)
_76 adalah URL relatif, jadi buat variabel
>>> page = urlopen(url)
77 dengan URL dasar situs web

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_0

Anda dapat membuat URL lengkap dengan menggabungkan

>>> page = urlopen(url)
77 dengan URL relatif

Sekarang buka halaman

>>> page = urlopen(url)
_76 dengan
>>> title_index = html.find("<title>")
>>> title_index
14
8 dan gunakan
>>> start_index = title_index + len("<title>")
>>> start_index
21
5 untuk mendapatkan sumber HTML

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_1

Dengan sumber HTML diunduh dan diterjemahkan, Anda dapat membuat objek

>>> page = urlopen(url)
18 baru untuk mengurai HTML

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_2

>>> page = urlopen(url)
_83 mengembalikan daftar semua tautan di sumber HTML. Anda dapat mengulangi daftar ini untuk mencetak semua tautan di halaman web

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_3

Anda dapat mengakses URL relatif untuk setiap tautan melalui subskrip ________9______84. Gabungkan nilai ini dengan

>>> page = urlopen(url)
_77 untuk membuat
>>> page = urlopen(url)
86 penuh

Saat Anda siap, Anda dapat melanjutkan ke bagian berikutnya

Berinteraksi Dengan Formulir HTML

Modul

>>> title_index = html.find("<title>")
>>> title_index
14
6 yang telah Anda kerjakan sejauh ini dalam tutorial ini sangat cocok untuk meminta konten halaman web. Namun terkadang, Anda perlu berinteraksi dengan halaman web untuk mendapatkan konten yang Anda butuhkan. Misalnya, Anda mungkin perlu mengirimkan formulir atau mengklik tombol untuk menampilkan konten tersembunyi

Catatan. Tutorial ini diadaptasi dari bab “Berinteraksi Dengan Web” di Python Basics. Pengantar Praktis untuk Python 3. Jika Anda menikmati apa yang Anda baca, maka pastikan untuk memeriksa sisa buku ini

Pustaka standar Python tidak menyediakan sarana bawaan untuk bekerja dengan halaman web secara interaktif, tetapi banyak paket pihak ketiga tersedia dari PyPI. Di antaranya, MechanicalSoup adalah paket yang populer dan relatif mudah digunakan

Intinya, MechanicalSoup menginstal apa yang dikenal sebagai browser tanpa kepala, yang merupakan browser web tanpa antarmuka pengguna grafis. Browser ini dikendalikan secara terprogram melalui program Python

Instal MechanicalSoup

Anda dapat menginstal MechanicalSoup dengan

>>> page = urlopen(url)
88 di terminal Anda

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
_4

Anda harus menutup dan memulai kembali sesi IDLE Anda agar MechanicalSoup dapat dimuat dan dikenali setelah diinstal

Buat Objek >>> page = urlopen(url) _89

Ketik yang berikut ke dalam jendela interaktif IDLE

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
5

>>> page = urlopen(url)
_89 objek mewakili browser web tanpa kepala. Anda dapat menggunakannya untuk meminta halaman dari Internet dengan mengirimkan URL ke metode
>>> page = urlopen(url)
91 mereka

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
6

>>> page = urlopen(url)
_92 adalah objek
>>> page = urlopen(url)
93 yang menyimpan respons dari permintaan URL dari browser

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
7

Angka

>>> page = urlopen(url)
_94 mewakili kode status yang dikembalikan oleh permintaan. Kode status
>>> page = urlopen(url)
_94 berarti permintaan berhasil. Permintaan yang gagal mungkin menampilkan kode status
>>> page = urlopen(url)
96 jika URL tidak ada atau
>>> page = urlopen(url)
97 jika ada kesalahan server saat membuat permintaan

MechanicalSoup menggunakan Beautiful Soup untuk mengurai HTML dari permintaan, dan

>>> page = urlopen(url)
92 memiliki atribut
>>> page = urlopen(url)
99 yang mewakili objek
>>> page = urlopen(url)
18

>>> ________16______8

Anda dapat melihat HTML dengan memeriksa atribut ________9______99

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
9

Perhatikan halaman ini memiliki

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_02 dengan
>>> page
<http.client.HTTPResponse object at 0x105fef820>
03 elemen untuk nama pengguna dan kata sandi

Hilangkan iklan

Kirim Formulir Dengan MechanicalSoup

Buka halaman

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_04 dari contoh sebelumnya di browser dan lihat sendiri sebelum melanjutkan

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Coba ketikkan kombinasi nama pengguna dan kata sandi acak. Jika Anda salah menebak, maka pesan Nama pengguna atau kata sandi salah. ditampilkan di bagian bawah halaman

Namun, jika Anda memberikan kredensial login yang benar, Anda akan dialihkan ke halaman ________9______76

UsernamePassword

>>> page
<http.client.HTTPResponse object at 0x105fef820>
06
>>> page
<http.client.HTTPResponse object at 0x105fef820>
07

Pada contoh berikutnya, Anda akan melihat cara menggunakan MechanicalSoup untuk mengisi dan mengirimkan formulir ini menggunakan Python

Bagian penting dari kode HTML adalah form login—yaitu, semua yang ada di dalam tag

>>> page
<http.client.HTTPResponse object at 0x105fef820>
02.
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_02 di halaman ini memiliki atribut
>>> page
<http.client.HTTPResponse object at 0x105fef820>
10 yang disetel ke
>>> page
<http.client.HTTPResponse object at 0x105fef820>
11. Formulir ini berisi dua elemen
>>> page
<http.client.HTTPResponse object at 0x105fef820>
03, satu bernama
>>> page
<http.client.HTTPResponse object at 0x105fef820>
13 dan yang lainnya bernama
>>> page
<http.client.HTTPResponse object at 0x105fef820>
14. Elemen
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_03 ketiga adalah tombol Kirim

Sekarang setelah Anda mengetahui struktur yang mendasari formulir login, serta kredensial yang diperlukan untuk masuk, lihat program yang mengisi formulir dan mengirimkannya

Di jendela editor baru, ketik program berikut

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
0

Simpan file dan tekan F5 untuk menjalankannya. Untuk mengonfirmasi bahwa Anda telah berhasil masuk, ketik berikut ini ke dalam jendela interaktif.

>>>

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
1

Sekarang uraikan contoh di atas

  1. Anda membuat instance

    >>> page = urlopen(url)
    
    _89 dan menggunakannya untuk meminta URL
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    17. Anda menetapkan konten HTML halaman ke variabel
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    18 menggunakan properti
    >>> page = urlopen(url)
    
    99

  2. >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    20 mengembalikan daftar semua
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    02 elemen pada halaman. Karena halaman hanya memiliki satu elemen
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    _02, Anda dapat mengakses formulir dengan mengambil elemen di indeks
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    23 dari daftar. Jika hanya ada satu formulir di satu halaman, Anda juga dapat menggunakan
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    24. Dua baris berikutnya pilih input nama pengguna dan kata sandi dan atur nilainya masing-masing menjadi ________12______25 dan
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    26

  3. Anda mengirimkan formulir dengan

    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    _27. Perhatikan bahwa Anda meneruskan dua argumen ke metode ini, objek
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    28 dan URL dari
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    29, yang Anda akses melalui
    >>> page
    <http.client.HTTPResponse object at 0x105fef820>
    
    30

Di jendela interaktif, Anda mengonfirmasi bahwa pengiriman berhasil dialihkan ke halaman

>>> page = urlopen(url)
76. Jika ada yang salah, maka nilai
>>> page
<http.client.HTTPResponse object at 0x105fef820>
32 akan tetap menjadi
>>> page
<http.client.HTTPResponse object at 0x105fef820>
33

Catatan. Peretas dapat menggunakan program otomatis seperti di atas untuk memaksa login dengan cepat mencoba berbagai nama pengguna dan kata sandi hingga mereka menemukan kombinasi yang berfungsi

Selain ini sangat ilegal, hampir semua situs web saat ini mengunci Anda dan melaporkan alamat IP Anda jika mereka melihat Anda membuat terlalu banyak permintaan yang gagal, jadi jangan coba-coba

Sekarang setelah Anda memiliki set variabel

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_34, saatnya untuk secara terprogram mendapatkan URL untuk setiap tautan pada halaman
>>> page = urlopen(url)
76

Untuk melakukan ini, Anda menggunakan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_36 lagi, kali ini meneruskan string
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 untuk memilih semua elemen jangkar
>>> page
<http.client.HTTPResponse object at 0x105fef820>
38 pada halaman

>>>

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
2

Sekarang Anda dapat mengulangi setiap tautan dan mencetak atribut

>>> page = urlopen(url)
52

>>>

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
3

URL yang terkandung dalam setiap atribut

>>> page = urlopen(url)
_52 adalah URL relatif, yang tidak terlalu membantu jika Anda ingin membukanya nanti menggunakan MechanicalSoup. Jika Anda mengetahui URL lengkapnya, Anda dapat menetapkan bagian yang diperlukan untuk membuat URL lengkap

Dalam hal ini, URL dasar hanya ________12______41. Kemudian Anda dapat menggabungkan URL dasar dengan URL relatif yang ditemukan di atribut

>>> page = urlopen(url)
38

>>>

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
4

Anda dapat melakukan banyak hal hanya dengan

>>> page = urlopen(url)
_91,
>>> page
<http.client.HTTPResponse object at 0x105fef820>
36, dan
>>> page
<http.client.HTTPResponse object at 0x105fef820>
45. Konon, MechanicalSoup mampu melakukan lebih banyak lagi. Untuk mempelajari lebih lanjut tentang MechanicalSoup, lihat dokumen resmi

Hilangkan iklan

Periksa Pemahaman Anda

Perluas blok di bawah untuk memeriksa pemahaman Anda

Latihan. Kirim Formulir Dengan MechanicalSoupTampilkan/Sembunyikan

Gunakan MechanicalSoup untuk memberikan nama pengguna yang benar (

>>> page
<http.client.HTTPResponse object at 0x105fef820>
06) dan kata sandi (
>>> page
<http.client.HTTPResponse object at 0x105fef820>
07) ke formulir login yang terletak di URL
>>> page
<http.client.HTTPResponse object at 0x105fef820>
17

Setelah formulir dikirimkan, tampilkan judul halaman saat ini untuk menentukan bahwa Anda telah dialihkan ke halaman

>>> page = urlopen(url)
76

Program Anda harus mencetak teks

>>> page
<http.client.HTTPResponse object at 0x105fef820>
50

Anda dapat memperluas blok di bawah ini untuk melihat solusinya

Solusi. Kirim Formulir Dengan MechanicalSoupTampilkan/Sembunyikan

Pertama, impor paket

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_51 dan buat objek
>>> page
<http.client.HTTPResponse object at 0x105fef820>
52

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
5

Arahkan browser ke halaman login dengan mengirimkan URL ke

>>> page
<http.client.HTTPResponse object at 0x105fef820>
53 dan ambil HTML dengan atribut
>>> page = urlopen(url)
99

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
6

>>> page
<http.client.HTTPResponse object at 0x105fef820>
18 adalah
>>> page = urlopen(url)
18 contoh. Karena halaman hanya berisi satu formulir, Anda dapat mengakses formulir melalui
>>> page
<http.client.HTTPResponse object at 0x105fef820>
24. Menggunakan
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_36, pilih input nama pengguna dan kata sandi dan isi dengan nama pengguna
>>> page
<http.client.HTTPResponse object at 0x105fef820>
25 dan kata sandi
>>> page
<http.client.HTTPResponse object at 0x105fef820>
26

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
7

Setelah formulir diisi, Anda dapat mengirimkannya dengan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
27

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
8

Jika Anda mengisi formulir dengan nama pengguna dan kata sandi yang benar, maka

>>> page
<http.client.HTTPResponse object at 0x105fef820>
34 seharusnya mengarah ke halaman
>>> page = urlopen(url)
76. Anda dapat memastikannya dengan mencetak judul halaman yang ditetapkan ke
>>> page
<http.client.HTTPResponse object at 0x105fef820>
64

>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>
_9

Anda akan melihat teks berikut ditampilkan

>>> title_index = html.find("<title>")
>>> title_index
14
_0

Jika sebaliknya Anda melihat teks

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_65 atau yang lainnya, maka pengiriman formulir gagal

Saat Anda siap, Anda dapat melanjutkan ke bagian berikutnya

Berinteraksi Dengan Situs Web Secara Real Time

Terkadang Anda ingin dapat mengambil data waktu nyata dari situs web yang menawarkan informasi yang terus diperbarui

Di hari-hari kelam sebelum Anda mempelajari pemrograman Python, Anda harus duduk di depan browser, mengklik tombol Refresh untuk memuat ulang halaman setiap kali Anda ingin memeriksa apakah konten yang diperbarui tersedia. Tapi sekarang Anda dapat mengotomatiskan proses ini menggunakan metode

>>> page = urlopen(url)
91 dari objek MechanicalSoup
>>> page = urlopen(url)
89

Buka browser pilihan Anda dan arahkan ke URL

>>> page
<http.client.HTTPResponse object at 0x105fef820>
68

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Halaman

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_69 ini mensimulasikan lemparan dadu bersisi enam, memperbarui hasilnya setiap kali Anda me-refresh browser. Di bawah, Anda akan menulis program yang berulang kali menggores halaman untuk mendapatkan hasil baru

Hal pertama yang perlu Anda lakukan adalah menentukan elemen mana pada halaman yang berisi hasil die roll. Lakukan ini sekarang dengan mengklik kanan di manapun pada halaman dan memilih View page source. Sedikit lebih dari separuh kode HTML adalah tag

>>> page
<http.client.HTTPResponse object at 0x105fef820>
70 yang terlihat seperti ini

>>> title_index = html.find("<title>")
>>> title_index
14
_1

Teks tag

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_70 mungkin berbeda untuk Anda, tetapi ini adalah elemen halaman yang Anda perlukan untuk menggores hasilnya

Catatan. Untuk contoh ini, Anda dapat dengan mudah memeriksa bahwa hanya ada satu elemen di halaman dengan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
72. Meskipun atribut
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_73 seharusnya unik, dalam praktiknya Anda harus selalu memeriksa bahwa elemen yang Anda minati telah teridentifikasi secara unik

Sekarang mulailah dengan menulis program sederhana yang membuka halaman

>>> page
<http.client.HTTPResponse object at 0x105fef820>
69, menggores hasilnya, dan mencetaknya ke konsol

>>> title_index = html.find("<title>")
>>> title_index
14
_2

Contoh ini menggunakan metode

>>> page = urlopen(url)
_18 objek
>>> page
<http.client.HTTPResponse object at 0x105fef820>
36 untuk menemukan elemen dengan
>>> page
<http.client.HTTPResponse object at 0x105fef820>
77. String
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_78, yang Anda teruskan ke
>>> page
<http.client.HTTPResponse object at 0x105fef820>
36, menggunakan pemilih ID CSS
>>> page
<http.client.HTTPResponse object at 0x105fef820>
80 untuk menunjukkan bahwa
>>> page
<http.client.HTTPResponse object at 0x105fef820>
81 adalah nilai
>>> page
<http.client.HTTPResponse object at 0x105fef820>
73

Untuk mendapatkan hasil baru secara berkala, Anda harus membuat loop yang memuat halaman di setiap langkah. Jadi segala sesuatu di bawah garis

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_83 dalam kode di atas harus masuk ke dalam tubuh loop

Untuk contoh ini, Anda menginginkan empat lemparan dadu dengan interval sepuluh detik. Untuk melakukannya, baris terakhir kode Anda perlu memberi tahu Python untuk berhenti berjalan selama sepuluh detik. Anda dapat melakukan ini dengan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
_84 dari modul
>>> page
<http.client.HTTPResponse object at 0x105fef820>
85 Python. Metode
>>> page
<http.client.HTTPResponse object at 0x105fef820>
_84 mengambil satu argumen yang mewakili jumlah waktu untuk tidur dalam hitungan detik

Berikut adalah contoh yang menggambarkan cara kerja ________12______87

>>> title_index = html.find("<title>")
>>> title_index
14
_3

Saat Anda menjalankan kode ini, Anda akan melihat bahwa pesan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
88 tidak ditampilkan hingga lima detik berlalu sejak fungsi
>>> page = urlopen(url)
17 pertama dijalankan

Untuk contoh die roll, Anda harus meneruskan nomor

>>> page
<http.client.HTTPResponse object at 0x105fef820>
90 ke
>>> page
<http.client.HTTPResponse object at 0x105fef820>
87. Inilah program yang diperbarui

>>> title_index = html.find("<title>")
>>> title_index
14
_4

Saat Anda menjalankan program, Anda akan segera melihat hasil pertama yang dicetak ke konsol. Setelah sepuluh detik, hasil kedua ditampilkan, lalu yang ketiga, dan terakhir yang keempat. Apa yang terjadi setelah hasil keempat dicetak?

Program terus berjalan selama sepuluh detik sebelum akhirnya berhenti. Itu buang-buang waktu. Anda dapat menghentikannya dengan menggunakan pernyataan

>>> page
<http.client.HTTPResponse object at 0x105fef820>
92 untuk menjalankan
>>> page
<http.client.HTTPResponse object at 0x105fef820>
93 hanya untuk tiga permintaan pertama

>>> title_index = html.find("<title>")
>>> title_index
14
_5

Dengan teknik seperti ini, Anda dapat mengikis data dari situs web yang memperbarui datanya secara berkala. Namun, Anda harus menyadari bahwa meminta halaman berkali-kali secara berurutan dapat dianggap sebagai penggunaan situs web yang mencurigakan, atau bahkan berbahaya.

Penting. Sebagian besar situs web menerbitkan dokumen Persyaratan Penggunaan. Anda sering dapat menemukan tautannya di footer situs web

Selalu baca dokumen ini sebelum mencoba mengorek data dari situs web. Jika Anda tidak dapat menemukan Ketentuan Penggunaan, coba hubungi pemilik situs web dan tanyakan apakah mereka memiliki kebijakan terkait volume permintaan

Kegagalan untuk mematuhi Ketentuan Penggunaan dapat mengakibatkan IP Anda diblokir, jadi berhati-hatilah

Bahkan mungkin untuk merusak server dengan jumlah permintaan yang berlebihan, sehingga Anda dapat membayangkan bahwa banyak situs web mengkhawatirkan volume permintaan ke server mereka. Selalu periksa Ketentuan Penggunaan dan hormati saat mengirim banyak permintaan ke situs web

Hilangkan iklan

Kesimpulan

Meskipun memungkinkan untuk mengurai data dari Web menggunakan alat di pustaka standar Python, ada banyak alat di PyPI yang dapat membantu menyederhanakan prosesnya.

Dalam tutorial ini, Anda belajar caranya

  • Minta halaman web menggunakan modul
    >>> title_index = html.find("<title>")
    >>> title_index
    14
    
    6 bawaan Python
  • Parsing HTML menggunakan Beautiful Soup
  • Berinteraksi dengan formulir web menggunakan MechanicalSoup
  • Berulang kali meminta data dari situs web untuk memeriksa pembaruan

Menulis program pengikisan web otomatis itu menyenangkan, dan Internet tidak kekurangan konten yang dapat menghasilkan semua jenis proyek menarik

Ingatlah, tidak semua orang ingin Anda menarik data dari server web mereka. Selalu periksa Ketentuan Penggunaan situs web sebelum Anda mulai mengorek, dan hormati cara mengatur waktu permintaan web Anda sehingga Anda tidak membanjiri server dengan lalu lintas

Kode sumber. Klik di sini untuk mengunduh kode sumber gratis yang akan Anda gunakan untuk mengumpulkan dan mengurai data dari Web

Sumber daya tambahan

Untuk informasi lebih lanjut tentang pengikisan web dengan Python, lihat sumber daya berikut

  • Sup Cantik. Bangun Pengikis Web Dengan Python
  • Integrasi API dengan Python
  • Python & API. Combo Pemenang untuk Membaca Data Publik

Catatan. Jika Anda menikmati apa yang Anda pelajari dalam contoh ini dari Python Basics. Pengantar Praktis untuk Python 3, lalu pastikan untuk memeriksa sisa buku ini

Tandai sebagai Selesai

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Kirimi Saya Trik Python »

Tentang David Amos

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?
Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

David adalah seorang penulis, pemrogram, dan ahli matematika yang bersemangat menjelajahi matematika melalui kode

» Lebih lanjut tentang Daud


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Aldren

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Geir Arne

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Joanna

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Yakub

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Kate

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Martin

Bagaimana Anda mendapatkan teks tertentu dari html dengan python?

Filipina

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bagaimana cara mengekstrak teks dari HTML dengan python?

Menggunakan Parsel untuk Mengekstrak Teks dari HTML dengan Python .
Dimulai dengan Parsel
Membuat Selector
Mengekstraksi Teks Menggunakan Pemilih CSS
Mengekstrak Teks Menggunakan Pemilih XPath
Menghapus Elemen
Membuat Skrip Scraping Web Anda

Bagaimana cara mengekstrak teks tertentu dari situs web dengan python?

Untuk mengekstrak data menggunakan pengikisan web dengan python, Anda harus mengikuti langkah-langkah dasar ini. .
Temukan URL yang ingin Anda kikis
Memeriksa Halaman
Temukan data yang ingin Anda ekstrak
Tulis kodenya
Jalankan kode dan ekstrak datanya
Simpan data dalam format yang diperlukan

Bagaimana cara mengekstrak teks dari HTML?

str = extractHTMLText( code ) mem-parsing kode HTML dalam kode dan mengekstrak teks.

Bagaimana cara mengambil konten HTML dengan python?

Solusi paling sederhana adalah sebagai berikut. .
permintaan impor. cetak (permintaan. dapatkan(url = 'https. //google. com'). teks).
impor urllib. permintaan sebagai r. halaman = r. urlopen('https. //google. com').
impor urllib. permintaan sebagai r. halaman = r. urlopen('https. //google. com').
<. doctype html>. <