Pengikisan web adalah teknik untuk mengambil data dari situs web. Saat berselancar di web, banyak situs web yang tidak mengizinkan pengguna menyimpan data untuk penggunaan pribadi. Salah satu caranya adalah dengan menyalin-tempel data secara manual, yang membosankan dan memakan waktu. Pengikisan Web adalah otomatisasi proses ekstraksi data dari situs web. Acara ini dilakukan dengan bantuan perangkat lunak pengikis web yang dikenal sebagai pengikis web. Mereka secara otomatis memuat dan mengekstrak data dari situs web berdasarkan kebutuhan pengguna. Ini dapat dibuat khusus agar berfungsi untuk satu situs atau dapat dikonfigurasi untuk bekerja dengan situs web apa pun. Show Di Python, perpustakaan BeautifulSoup dan Scrapy Crawler sebagian besar digunakan untuk pengikisan web. Pada artikel ini, kita akan membahas perbedaan antara kedua library ini Sup CantikBeautifulSoup adalah pustaka Python paling populer yang membantu mem-parsing dokumen HTML atau XML ke dalam struktur pohon untuk menemukan dan mengekstrak data dari halaman web. Itu mengekstrak semua hal buruk dalam bentuk pohon dan kemudian membantu kita menggunakan data dalam bentuk kamus. Alat ini menampilkan antarmuka pythonic yang sederhana dan konversi penyandian otomatis untuk memudahkan bekerja dengan data situs web. Sangat mudah dipelajari dan dikuasai dan memiliki dokumentasi komprehensif yang baik yang membantu untuk mempelajari berbagai hal dengan mudah Instalasi Modul ini tidak disertakan dengan Python. Untuk menginstalnya ketik perintah di bawah ini di terminal pip install BeautifulSoup4 Mengekstrak dari URL Python3
pip install scrapy0 Keuntungan
Kekurangan
Perayap ScrapyScrapy adalah salah satu perpustakaan paling kuat. Ini adalah kerangka kerja kolaboratif sumber terbuka untuk mengekstraksi data dari situs web yang kami butuhkan. Performanya cepat. Scrapy menyediakan dukungan bawaan untuk mengekstraksi data dari sumber HTML atau XML menggunakan ekspresi CSS dan ekspresi XPath Scrapy sebenarnya adalah kerangka web scraper yang lengkap. Anda dapat memberikan Scrapy URL root untuk mulai menggores, lalu Anda dapat menentukan berapa banyak URL yang ingin Anda jelajahi dan ambil, dll. Instalasi pip install scrapy_ Keuntungan
Kekurangan
Tabel Perbedaan antara perayap BeautifulSoup dan ScrapyDasar Sup Cantik Perayap scrapy Struktur Ini adalah perpustakaan. Ini adalah kerangka kerja yang lengkapPertunjukan Sangat lambat untuk melakukan tugas tertentu. Itu dapat melakukan banyak hal dengan cepat karena fitur bawaannyaKemungkinan diperpanjang Ini yang terbaik untuk proyek kecil. Pilihan yang lebih baik untuk proyek besar dengan kompleksitasRamah pemula Ini adalah pilihan terbaik bagi pemula untuk memulai. Scrapy relatif lebih kompleks daripada BeautifulSoupMasyarakat Komunitas pengembangnya relatif lemah. Komunitas pengembang Scrapy lebih kuat dan luasPertimbangan Itu dianggap sebagai pengurai. Itu dianggap sebagai laba-labaJika Anda berurusan dengan operasi scraping kompleks yang membutuhkan kecepatan dan kompleksitas yang tinggi, maka Anda harus memilih Scrapy dan jika Anda baru dalam pemrograman dan ingin bekerja dengan proyek web scraping maka Beautiful Soup bagus karena Anda dapat mempelajarinya dengan mudah dan mampu Artikel ini membahas langkah-langkah yang terlibat dalam web scraping menggunakan implementasi framework Web Scraping Python yang disebut Beautiful Soup. Langkah-langkah yang terlibat dalam pengikisan web
Langkah 1. Menginstal pustaka pihak ketiga yang diperlukan
pip install requests pip install html5lib pip install bs4
Langkah 2. Mengakses konten HTML dari halaman web Piton
soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')1 ________4 pip install scrapy_4_______0 soup = BeautifulSoup(r.content, 'html5lib')4 soup = BeautifulSoup(r.content, 'html5lib')_5 soup = BeautifulSoup(r.content, 'html5lib')6 Mari kita coba memahami potongan kode ini
Catatan. Terkadang Anda mungkin mendapatkan kesalahan "Tidak diterima" jadi coba tambahkan agen pengguna browser seperti di bawah ini. Temukan agen pengguna Anda berdasarkan perangkat dan browser dari sini https. //deviceatlas. com/blog/daftar-pengguna-agen-string Python3soup = BeautifulSoup(r.content, 'html5lib')7 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')9 table = soup.find('div', attrs = {'id':'all_quotes'})0 table = soup.find('div', attrs = {'id':'all_quotes'})1 table = soup.find('div', attrs = {'id':'all_quotes'})2 table = soup.find('div', attrs = {'id':'all_quotes'})3 table = soup.find('div', attrs = {'id':'all_quotes'})_4 soup = BeautifulSoup(r.content, 'html5lib')2 soup = BeautifulSoup(r.content, 'html5lib')0 table = soup.find('div', attrs = {'id':'all_quotes'})7 soup = BeautifulSoup(r.content, 'html5lib')0 table = soup.find('div', attrs = {'id':'all_quotes'})9 soup = BeautifulSoup(r.content, 'html5lib')0 for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)1 soup = BeautifulSoup(r.content, 'html5lib')_5 soup = BeautifulSoup(r.content, 'html5lib')6 Langkah 3. Mem-parsing konten HTML Pitonfor row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)_4
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)7 for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)8 import quote['theme'] = row.h5.text0 quote['theme'] = row.h5.text1
soup = BeautifulSoup(r.content, 'html5lib')0 quote['theme'] = row.h5.text4 ________4 pip install scrapy_4_______0 soup = BeautifulSoup(r.content, 'html5lib')4 quote['theme'] = row.h5.text1 quote['theme'] = row.h5.text9 soup = BeautifulSoup(r.content, 'html5lib')0 quote['url'] = row.a['href']1 quote['url'] = row.a['href']2 quote['url'] = row.a['href']3 quote['url'] = row.a['href']4 soup = BeautifulSoup(r.content, 'html5lib')_5 quote['url'] = row.a['href']6 Hal yang sangat menyenangkan tentang pustaka BeautifulSoup adalah ia dibangun di atas pustaka parsing HTML seperti html5lib, lxml, html. pengurai, dll. Jadi objek BeautifulSoup dan menentukan pustaka parser dapat dibuat pada saat yang bersamaan. Pada contoh di atas, soup = BeautifulSoup(r.content, 'html5lib')_ Kami membuat objek BeautifulSoup dengan memberikan dua argumen
Sekarang sup. prettify() dicetak, memberikan representasi visual dari struktur parse yang dibuat dari konten HTML mentah. Langkah 4. Mencari dan menavigasi melalui pohon parse Sekarang, kami ingin mengekstrak beberapa data berguna dari konten HTML. Objek sup berisi semua data dalam struktur bersarang yang dapat diekstraksi secara terprogram. Dalam contoh kami, kami menggores halaman web yang terdiri dari beberapa kutipan. Jadi, kami ingin membuat program untuk menyimpan kutipan tersebut (dan semua informasi yang relevan tentangnya). Pitonquote['url'] = row.a['href']_7 quote['url'] = row.a['href']_8
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)7 for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)8 import quote['theme'] = row.h5.text0
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)6 filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7
soup = BeautifulSoup(r.content, 'html5lib')0 quote['theme'] = row.h5.text4 ________4 pip install scrapy_4_______0 soup = BeautifulSoup(r.content, 'html5lib')4 filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7 quote['theme'] = row.h5.text9 soup = BeautifulSoup(r.content, 'html5lib')0 quote['url'] = row.a['href']1 quote['url'] = row.a['href']2 quote['url'] = row.a['href']3 filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7
soup = BeautifulSoup(r.content, 'html5lib')0 requests 3requests 4filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7
soup = BeautifulSoup(r.content, 'html5lib')0 requests 8requests 9URL 0soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')9 URL 3table = soup.find('div', attrs = {'id':'all_quotes'})1 URL 5URL 6filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7
soup = BeautifulSoup(r.content, 'html5lib')00 soup = BeautifulSoup(r.content, 'html5lib')01 requests 9soup = BeautifulSoup(r.content, 'html5lib')03 soup = BeautifulSoup(r.content, 'html5lib')04 soup = BeautifulSoup(r.content, 'html5lib')05 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')9 soup = BeautifulSoup(r.content, 'html5lib')08 table = soup.find('div', attrs = {'id':'all_quotes'})1 soup = BeautifulSoup(r.content, 'html5lib')10 soup = BeautifulSoup(r.content, 'html5lib')11 soup = BeautifulSoup(r.content, 'html5lib')_12 soup = BeautifulSoup(r.content, 'html5lib')13 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')15 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')17 soup = BeautifulSoup(r.content, 'html5lib')18 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')21 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')17 soup = BeautifulSoup(r.content, 'html5lib')24 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')27 soup = BeautifulSoup(r.content, 'html5lib')28 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')17 soup = BeautifulSoup(r.content, 'html5lib')32 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')35 soup = BeautifulSoup(r.content, 'html5lib')36 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')17 soup = BeautifulSoup(r.content, 'html5lib')40 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')35 soup = BeautifulSoup(r.content, 'html5lib')44 soup = BeautifulSoup(r.content, 'html5lib')45 soup = BeautifulSoup(r.content, 'html5lib')46 soup = BeautifulSoup(r.content, 'html5lib')47 soup = BeautifulSoup(r.content, 'html5lib')48________4 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')17 soup = BeautifulSoup(r.content, 'html5lib')52 soup = BeautifulSoup(r.content, 'html5lib')19 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')35 soup = BeautifulSoup(r.content, 'html5lib')44 soup = BeautifulSoup(r.content, 'html5lib')45 soup = BeautifulSoup(r.content, 'html5lib')46 soup = BeautifulSoup(r.content, 'html5lib')47 soup = BeautifulSoup(r.content, 'html5lib')60________4 soup = BeautifulSoup(r.content, 'html5lib')_12 soup = BeautifulSoup(r.content, 'html5lib')63 filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)_7 soup = BeautifulSoup(r.content, 'html5lib')_65 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')67 soup = BeautifulSoup(r.content, 'html5lib')68 soup = BeautifulSoup(r.content, 'html5lib')69 soup = BeautifulSoup(r.content, 'html5lib')70 soup = BeautifulSoup(r.content, 'html5lib')71 soup = BeautifulSoup(r.content, 'html5lib')72 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')74 soup = BeautifulSoup(r.content, 'html5lib')12 soup = BeautifulSoup(r.content, 'html5lib')76 soup = BeautifulSoup(r.content, 'html5lib')0 soup = BeautifulSoup(r.content, 'html5lib')78 soup = BeautifulSoup(r.content, 'html5lib')18 soup = BeautifulSoup(r.content, 'html5lib')03 soup = BeautifulSoup(r.content, 'html5lib')24 soup = BeautifulSoup(r.content, 'html5lib')03______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________G soup = BeautifulSoup(r.content, 'html5lib')_12 soup = BeautifulSoup(r.content, 'html5lib')90 soup = BeautifulSoup(r.content, 'html5lib')12 URL 8 soup = BeautifulSoup(r.content, 'html5lib')13 soup = BeautifulSoup(r.content, 'html5lib')00 ________4______95 soup = BeautifulSoup(r.content, 'html5lib')_96 soup = BeautifulSoup(r.content, 'html5lib')97 Sebelum melanjutkan, kami menyarankan Anda untuk membaca konten HTML halaman web yang kami cetak menggunakan soup. prettify() dan coba temukan pola atau cara untuk menavigasi ke tanda kutip
table = soup.find('div', attrs = {'id':'all_quotes'})
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(" #")[0] quote['author'] = row.img['alt'].split(" #")[1] quotes.append(quote)
quote['theme'] = row.h5.text
quote['url'] = row.a['href']
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)
Jadi, ini adalah contoh sederhana cara membuat pengikis web dengan Python. Dari sini, Anda dapat mencoba menghapus situs web lain pilihan Anda. Jika ada pertanyaan, posting di bawah ini di bagian komentar Catatan. Scraping Web dianggap ilegal dalam banyak kasus. Ini juga dapat menyebabkan IP Anda diblokir secara permanen oleh situs web. Blog ini disumbangkan oleh Nikhil Kumar. Jika Anda menyukai GeeksforGeeks dan ingin berkontribusi, Anda juga dapat menulis artikel menggunakan tulis. geeksforgeeks. org atau kirimkan artikel Anda ke review-team@geeksforgeeks. org. Lihat artikel Anda muncul di halaman utama GeeksforGeeks dan bantu Geeks lainnya. Silakan tulis komentar jika Anda menemukan sesuatu yang salah, atau Anda ingin berbagi informasi lebih lanjut tentang topik yang dibahas di atas Bagaimana cara mengikis situs web dengan Python dan BeautifulSoup?Agar pengikisan web berfungsi dengan Python, kita akan melakukan tiga langkah dasar. . Ekstrak konten HTML menggunakan pustaka permintaan Menganalisis struktur HTML dan mengidentifikasi tag yang memiliki konten kami Ekstrak tag menggunakan Beautiful Soup dan masukkan data ke dalam daftar Python Bisakah saya menggunakan Scrapy dengan BeautifulSoup?Bisakah saya menggunakan Scrapy dengan BeautifulSoup? . Seperti disebutkan di atas, BeautifulSoup dapat digunakan untuk mem-parsing respons HTML dalam panggilan balik Scrapy. Yes, you can. As mentioned above, BeautifulSoup can be used for parsing HTML responses in Scrapy callbacks.
Mana yang lebih baik BeautifulSoup atau Scrapy?Scrapy adalah alat pengikis web yang lebih tangguh, lengkap fitur, lebih dapat diperluas, dan lebih terpelihara . Scrapy memungkinkan Anda merayapi, mengekstrak, dan menyimpan situs web lengkap. BeautilfulSoup di sisi lain hanya memungkinkan Anda mengurai HTML dan mengekstrak informasi yang Anda cari.
Apakah BeautifulSoup lebih cepat dari Scrapy?Scrapy sangat cepat. Kemampuannya untuk mengirim permintaan asinkron membuatnya lebih cepat daripada BeautifulSoup . Ini berarti Anda dapat mengikis dan mengekstrak data dari banyak halaman sekaligus. BeautifulSoup tidak memiliki sarana untuk merayapi dan mengikis halaman dengan sendirinya. |