Python adalah salah satu bahasa pemrograman yang paling umum digunakan untuk scraping, ilmu data, dan pembelajaran mesin. Karena cukup mudah dipelajari, cocok juga bagi mereka yang belum pernah memprogram sebelumnya.
Python memiliki sejumlah pustaka pengikisan data yang dapat mempermudah penulisan skrip. Kami telah menulis artikel pengantar tentang topik ini, tetapi hari ini kami akan fokus pada delapan pustaka web scraping Python terbaik secara lebih rinci.
Untuk memahami perpustakaan mana yang paling populer, kami mengumpulkan statistik unduhan untuk beberapa perpustakaan web scraping Python paling populer dari tiga tahun terakhir. Dengan menganalisis tren ini, kita dapat memperoleh wawasan tentang perkembangan kebutuhan pengembang web scraping dan bagaimana mereka memilih perpustakaan pilihan mereka.
Grafik menunjukkan bahwa Permintaan dan UrlLib3 memiliki unduhan yang jauh lebih banyak dibandingkan pustaka Python lainnya Pengikisan web. Hal ini bukan hanya karena popularitasnya dalam proyek web scraping, tetapi juga karena mereka umumnya digunakan di banyak proyek Python lain yang melibatkan interaksi dengan situs web. Secara khusus, Permintaan adalah pustaka HTTP yang banyak digunakan untuk Python dan banyak digunakan untuk permintaan API dan aplikasi berbasis web. UrlLib3, di sisi lain, adalah pustaka penanganan URL yang kuat dan banyak digunakan untuk mengurai, membaca, dan membuka URL.
Menarik untuk dicatat bahwa semakin populer suatu perpustakaan, semakin sederhana dan semakin sedikit fungsionalitas yang ditawarkannya. Hal ini mungkin terjadi karena perpustakaan yang lebih sederhana memberikan hambatan masuk yang lebih rendah dan memungkinkan pengembang dengan pengalaman lebih sedikit untuk memulai dengan cepat. Selain itu, perpustakaan yang lebih kompleks ditujukan untuk proyek yang lebih besar dan memerlukan lebih banyak pengetahuan teknis agar dapat digunakan secara efektif. Ini berarti bahwa mereka yang tidak memerlukan fitur tambahan atau kekuatan alat-alat ini memilih solusi yang lebih sederhana.
Daftar Isi
8 pustaka pengikisan web Python TOP
Berikut adalah pustaka dan kerangka kerja Python terbaik untuk web scraping untuk membantu Anda mengekstrak data dari situs web.
URLLib3
UrlLib3 adalah perpustakaan Python untuk bekerja dengan kueri. Ini memiliki serangkaian fungsi yang cukup kaya dan mendukung sejumlah fungsi untuk bekerja dengan kueri.
Keuntungan
UrlLib3 adalah perpustakaan kueri yang kuat. Ini memiliki banyak keunggulan, seperti:
- Mengatur dan mendukung aliran aman.
- Verifikasi SSL/TLS di sisi klien.
- Dukungan kumpulan koneksi.
- Membuat kueri berulang.
- Proksi untuk HTTP dan SOCKS.
Karena itu, perpustakaan dengan cepat menjadi salah satu perpustakaan paling populer dan banyak digunakan di Python.
Kekurangan
Sayangnya, terlepas dari kelebihannya, UrlLib memiliki sejumlah kelemahan:
- Ia tidak tahu cara memproses data, jadi tidak cocok untuk digores sebagai perpustakaan independen.
- Dibandingkan dengan perpustakaan Permintaan, ini tidak ramah pengguna.
- Kumpulan koneksi urllib3 membuat bekerja dengan cookie menjadi sulit karena ini bukan klien pelacakan.
menggunakan
Pustaka UrlLib digunakan untuk memproses kueri dan menerima serta mengirim data. Bekerja dengan baik dengan proxy.
Untuk memahami cara menggunakannya untuk pengikisan, mari kita tulis pengikis sederhana.
Menginstal perpustakaan URLLib3
Mari instal perpustakaan dengan menjalankan perintah berikut pada baris perintah:
pip install urllib3
Jika instalasi berhasil maka akan muncul pesan berikut:
C:\Users\user>pip install urllib3
Collecting urllib3
Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
---------------------------------------- 140.9/140.9 kB 832.1 kB/s eta 0:00:00
Installing collected packages: urllib3
Successfully installed urllib3-1.26.15
Jika Anda mengalami kesulitan, pastikan interpreter Python sudah diinstal. Untuk melakukannya, masukkan perintah berikut pada baris perintah:
python -V
Jika versi juru bahasa ditampilkan, ini bukan masalahnya. Dalam hal ini, Anda harus mengikuti petunjuk dalam kesalahan tersebut.
Menggunakan perpustakaan URLLib3
Untuk menggunakan perpustakaan UrlLib3, itu harus disertakan dalam file skrip. Untuk melakukannya, buat file dengan nama dan ekstensi apa pun *.py dan tambahkan baris kode pertama:
import urllib3
Sekarang perpustakaan sudah terinstal dan terhubung, mari jalankan permintaan untuk mendapatkan kode halaman situs web. Untuk verifikasi dan pengujian kami menggunakan permintaan ke https://example.com/.
Buat manajer koneksi dan simpan dalam variabel http:
http = urllib3.PoolManager()
Bagian kode ini memungkinkan koneksi ke situs web dan mengambil data. Permintaan itu sendiri dijalankan sebagai satu baris dan terdiri dari dua bagian: metode permintaan dan tautan yang melaluinya permintaan harus dijalankan:
resp = http.request('GET', 'https://example.com')
Hasil query disimpan dalam variabel atau variabel. Untuk melihat hasil query, kami menampilkannya di layar:
print(resp.data)
Perintah seperti itu menampilkan hasil seperti yang diterima, yaitu dalam satu baris:
D:\scripts>urllib3_test.py b'<!doctype html>\N<html>\N<head>\N <title>Contoh domain</title>\n\n <meta charset="utf-8" />\N <meta http-equiv="Content-type" content="text/html; charset=utf-8" />\N <meta name="viewport" content="width=device-width, initial-scale=1" />\N <style type="text/css">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \N</head>\n\n<body>\N<div>\N <h1>Contoh domain</h1>\N <p>Domain ini untuk digunakan dalam contoh ilustratif dalam dokumen. Anda dapat menggunakan domain ini dalam literatur tanpa koordinasi sebelumnya atau meminta izin.</p>\N <p><a href="https://www.iana.org/domains/example">Informasi lebih lanjut...</a></p>\N</div>\N</body>\N</html>\N'
Untuk menampilkan kode halaman yang dihasilkan dalam bentuk yang mudah, kode tersebut harus didekodekan:
print(resp.data.decode('utf-8'))
Hasil dari kueri seperti itu:
D:\scripts>urllib3_test.py
<!doctype html>
<html>
<head>
<title>Contoh domain</title>
... @media (lebar maksimal: 700 piksel) { div { margin: 0 otomatis; lebar: otomatis; } }
</style>
</head>
<body>
<div>
<h1>Contoh domain</h1>
<p>Domain ini untuk digunakan dalam contoh ilustratif dalam dokumen. Anda dapat menggunakan domain ini dalam literatur tanpa koordinasi sebelumnya atau meminta izin.</p>
<p><a href="https://www.iana.org/domains/example">Informasi lebih lanjut...</a></p>
</div>
</body>
</html>
Kode skripnya:
import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'https://example.com')
print(resp.data.decode('utf-8'))
Selanjutnya, kami memproses kode yang dihasilkan untuk mengekstrak hanya data yang berguna. Untuk melakukan ini, gunakan perpustakaan khusus atau gunakan ekspresi reguler.
Karena ekspresi reguler lebih universal dan nanti kita akan menggunakan pustaka khusus, mari pertimbangkan pemrosesan data menggunakan ekspresi reguler.
Pemrosesan data dengan ekspresi reguler
Pustaka RE digunakan untuk bekerja dengan ekspresi reguler. Ini sudah diinstal sebelumnya. Artinya tidak harus diinstal tambahan melalui pip install. Cukup dengan mengimpornya ke file skrip itu sendiri.
import re
Misalkan kita perlu menemukan semua header. Dalam hal ini mereka berada di tag h1. Untuk menemukannya berdasarkan kode, Anda dapat menerapkan:
re.findall(r'<h1>(.+?)</h1>', data)
Hasil skrip:
('Example Domain')
Kode skrip lengkap:
impor urllib3 impor kembali http = urllib3.PoolManager() resp = http.request('GET', 'https://example.com') data = resp.data.decode('utf-8') print(re.findall (R'<h1>(.+?)</h1>', datanya))
Ekspresi reguler juga dapat digunakan untuk memperoleh data dari tag lain atau, misalnya, konten tag.
Permintaan
Perpustakaan terpopuler kedua adalah Permintaan. Perpustakaan ini, seperti yang sebelumnya, juga digunakan untuk mengeksekusi query. Namun, ini lebih sederhana dan lebih ramah pengguna. Selain itu, ini sudah diinstal sebelumnya dan tidak memerlukan instalasi apa pun.
Keuntungan
Pustaka Permintaan, seperti UrlLib3, dirancang untuk melakukan berbagai kueri dan juga memiliki sejumlah keunggulan:
- Ini didasarkan pada urllib3 dan httplib dan karenanya memiliki semua fiturnya.
- Jauh lebih mudah digunakan daripada UrlLib3.
- Mendukung permintaan HEAD, POST, PUT, PATCH dan DELETE.
- Secara otomatis menambahkan string kueri ke alamat dan mengkodekan data POST.
Selain poin plus yang disebutkan di atas, perpustakaan ini juga ramah pengguna, memiliki komunitas yang sangat besar dan didokumentasikan dengan baik dengan contoh yang jelas.
Kekurangan
Sayangnya, perpustakaan ini juga memiliki kekurangan:
- Itu tidak dapat melakukan pemrosesan data, sehingga sangat tidak praktis untuk menggunakannya sebagai solusi mandiri untuk pengikisan.
- Ini adalah perpustakaan sinkron. Artinya, seluruh program diblokir sebelum query dan respon.
Namun, masalah sinkronisasi dan kurangnya pemrosesan data dapat diatasi dengan menghubungkan perpustakaan tambahan.
menggunakan
Pustaka Permintaan dimaksudkan untuk menyederhanakan kueri Python. Oleh karena itu, ada baiknya untuk melakukan scraping jika Anda ingin mendapatkan kode seluruh halaman.
Menginstal perpustakaan persyaratan
Jika sudah dihapus, gunakan perintah berikut untuk menginstalnya kembali:
pip install requests
Sekarang perpustakaan siap digunakan.
Menggunakan perpustakaan Permintaan
Pustaka HTTP ini, seperti yang sebelumnya, mendukung dua jenis kueri: Dapatkan dan Posting. Permintaan get digunakan untuk mengambil data dari situs dan permintaan posting digunakan untuk mengirim data. Mari kita lihat tutorial kami.
Untuk melakukannya, buat file dengan ekstensi *.py dan impor pustaka persyaratan:
import requests
Pertama, mari kita ambil datanya menggunakan metode Get. Berbeda dengan perpustakaan sebelumnya, satu baris sudah cukup untuk ini:
print(requests.get('https://example.com').text) Hasil eksekusi: D:\scripts>requests_test.py
<!doctype html>
<html>
<head>
<title>Contoh domain</title>
<style>
…
</style>
</head>
<body>
<div>
<h1>Contoh domain</h1>
<p>Domain ini untuk digunakan dalam contoh ilustratif dalam dokumen. Anda dapat menggunakan domain ini dalam literatur tanpa koordinasi sebelumnya atau meminta izin.</p>
<p><a href="https://www.iana.org/domains/example">Informasi lebih lanjut...</a></p>
</div>
</body>
</html>
Saat Anda menggunakan perpustakaan ini, Anda dapat menggunakannya tanpa mendekode atau menyandikan hasilnya - perpustakaan ini disimpan dalam bentuk yang nyaman. Kode skrip:
import requests
print(requests.get('https://example.com').text)
Sayangnya, perpustakaan ini hanya memungkinkan Anda menerima atau mengirim data tertentu, sehingga Anda harus memprosesnya sendiri setelahnya. Namun, seperti yang telah disebutkan, ekspresi reguler adalah alat universal, jadi kami akan kembali mengandalkan perpustakaan ekspresi reguler.
Pemrosesan data dengan ekspresi reguler
Kita sudah mendapatkan data header pada halaman tersebut sebelumnya, maka kali ini kita akan mendapatkan link yang ada pada halaman tersebut -Hari disimpan:
re.findall(r'<a\shref=\S(.+?)\S>', data)
Di sini kita telah menggunakan pola ekspresi reguler khusus, yaitu “\S” dan “\s”. Mereka diperlukan untuk mengkodekan karakter tertentu. Dalam hal ini, \S menggantikan karakter (tanda kutip) dan \s menggantikan spasi.
Sebagai hasil dari eksekusi skrip, kami menerima tautan yang ada di tag telah disimpan:
D:\scripts>requests_test.py
('https://www.iana.org/domains/example')
Kode skrip:
import requests
import re
data = requests.get('https://example.com').text
print(re.findall(r'<a\shref=\S(.+?)\S>', data))
Seperti yang Anda lihat dari kodenya, perpustakaan permintaan sangat nyaman dan fungsional. Namun, menggunakan ekspresi reguler tidak selalu mudah dan menghubungkan perpustakaan tambahan untuk menggunakan pemilih CSS bisa jadi cukup sulit dan menghabiskan banyak sumber daya.
Baca juga HCara menggunakan cURL dengan Python
Dalam hal ini, Anda dapat menggunakan perpustakaan Permintaan dan alat pengikisan khusus yang menjalankan fungsi yang biasanya dilakukan oleh perpustakaan khusus. Mari kita ambil API web scraping kita sebagai contoh.
Untuk menggunakannya, Anda harus mendaftar dan menyalin kunci API akun Anda. Anda akan membutuhkannya nanti. Untuk bekerja dengan sumber daya, kita memerlukan metode POST:
import requests
import json
url = "https://api.scrape-it.cloud//scrape"
payload = json.dumps({
"extract_rules": {
"title": "h1"
},
"url": "example.com"
})
headers = {
'x-api-key': 'YOUR-API-KEY',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Cukup dengan mengonfigurasi aturan Anda di ekstrak_rules, tentukan URL yang diperlukan dan masukkan kunci API Anda agar dapat berfungsi.
Kikis-It.Cloud
Scrape-It.Cloud SDK adalah perpustakaan yang menyediakan serangkaian fungsi dan metode bawaan yang dapat dengan mudah diintegrasikan ke dalam kode Python Anda, memungkinkan Anda mengakses dan berinteraksi dengan API scraping web kami. Ini adalah solusi optimal untuk melindungi dari penyumbatan, memecahkan captcha, dan memecahkan masalah pengambilan data JavaScript.
Keuntungan
Karena perpustakaan ini bekerja dengan API web scraping, ia menawarkan beberapa keuntungan:
- Ini memiliki sintaks sederhana yang bahkan dapat digunakan oleh pemula.
- Ini memungkinkan penggunaan proxy (server perumahan dan pusat data).
- Ini menghapus situs web dinamis yang menggunakan JavaScript.
- Ini menganalisis data dari setiap struktur dengan baik.
Perpustakaan memiliki banyak pengaturan dan fungsi tambahan, yang dijelaskan secara rinci dalam dokumentasi resmi.
Kekurangan
Ini memiliki satu kelemahan:
- Data yang diambil dalam format JSON, sehingga diperlukan pemrosesan tambahan untuk mengolahnya.
Kerugian ini dapat dengan mudah diatasi dengan menghubungkan perpustakaan JSON bawaan tambahan.
menggunakan
Pustaka Scrape-It.Cloud dirancang untuk mengikis data. Ini membantu mengikis situs web apa pun meskipun IP Anda diblokir. Sangat cocok untuk menjalankan kueri dan mengambil data tertentu dari suatu halaman.
Menginstal perpustakaan Scrape-It.Cloud
Anda dapat menginstal perpustakaan melalui pip install:
pip install scrapeit-cloud
Kami juga merekomendasikan untuk menginstal perpustakaan scraping Google Maps dan Google SERP, yang juga akan kami pertimbangkan:
pip install google-serp-api
pip install sc-google-maps-api
Untuk menggunakan perpustakaan ini, kami memerlukan kunci API, yang dapat Anda temukan di akun pribadi Anda setelah masuk ke scrape-it.cloud. Setelah itu, Anda bisa mulai membuat scraper.
Menggunakan perpustakaan Scrape-It.Cloud
Buat file dengan ekstensi *.py dan sertakan perpustakaan:
from scrapeit_cloud import ScrapeitCloudClient
import json
Sekarang masukkan kunci API Anda:
client = ScrapeitCloudClient(api_key='YOUR_API_KEY')
Let’s get the code of the page and display the result:
response = client.scrape(
params={
"url": "https://quotes.toscrape.com/"
}
)
print(response.text)
Periksa hasilnya:
D:\scripts>scrape_test.py {"status":"ok","scrapingResult":{"content":"<!DOCTYPE html><html lang="\"en\""><head>\n\t<meta charset="\"UTF-8\"">\n\t<title>Kutipan tentang Scrape</title>\N <link rel="\"stylesheet\"" href="\"/static/bootstrap.min.css\"">\N <link rel="\"stylesheet\"" href="\"/static/main.css\"">\N</head>\N<body>\N <div class="\"container\"">\N <div class="\"row" header-box\">\N <div class="\"col-md-8\"">\N <h1>\N <a href="/id/\"/\"/" style="\"text-decoration:" none\">Kutipan tentang Scrape</a>\N </h1>\N </div>\N <div class="\"col-md-4\"">\N <p>\n \n <a href="/id/\"/login\"/">Gabung</a>\n \n </p>\N... </>}}
Seperti disebutkan, perpustakaan mengembalikan kode JSON dan jika Anda memperhatikan strukturnya, dalam hal ini ada di parameter “konten”. Mari impor perpustakaan JSON dan cetak hanya konten parameter ini:
data = json.loads(response.text)
result = data("scrapingResult")("content")
print(result)
Hasil:
D:\scripts>scrape_test.py
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>Kutipan tentang Scrape</title>
<link rel="stylesheet" href="https://scrape-it.cloud/static/bootstrap.min.css">
<link rel="stylesheet" href="http://scrape-it.cloud/static/main.css">
</head>
<body>
<div class="container">
<div class="row header-box">
...
</html>
Kode skrip:
from scrapeit_cloud import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR-API-KEY')
response = client.scrape(
params={
"url": "https://quotes.toscrape.com/"
}
)
data = json.loads(response.text)
result = data("scrapingResult")("content")
print(result)
Sekarang datanya persis seperti yang kami inginkan.
Pemrosesan data dengan perpustakaan Scrape-It.Cloud
Ada perpustakaan tambahan untuk mengambil sumber daya seperti Google Maps atau Google SERPs. Mari kita lihat contoh penggunaannya.
Elemen dasar bekerja dengan perpustakaan adalah sama dan tidak berbeda dengan perpustakaan Scrape-It.Cloud. Satu-satunya perbedaan adalah mereka memiliki parameter tambahan.
Misalnya, untuk mengikis hasil pencarian Google, Anda dapat menggunakan:
from google_serp_api import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR_API_KEY')
response = client.scrape(
params={
"keyword": "pizza",
"country": "US",
"num_results": 10,
"domain": "com"
}
)
data = json.loads(response.text)
print (data)
Cara mendapatkan data dari Google Maps:
from sc_google_maps_api import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR_API_KEY')
response = client.scrape(
params={
"keyword": "plumber in new york",
"country": "US",
"domain": "com"
}
)
data = json.loads(response.text)
print (data)
Hasil:
D:\scripts>scrape_test.py
{'status': 'ok', 'scrapingResult': {'pagination': {'start': 0}, 'locals': ({'position': 1, 'title': 'RR Plumbing Roto-Rooter', 'phone': '+1 212-687-1215', 'address': '450 7th Ave Ste B, New York, NY 10123, United States', 'website': 'https://www.rotorooter.com/manhattan/', 'workingHours': {'timezone': 'America/New_York', 'days': ({'day': 'Wednesday', 'time': 'Open 24 hours'}
Menggunakan perpustakaan ini akan cukup mudah bahkan untuk pemula.
LXML
Lxml adalah perpustakaan untuk parsing dan memproses struktur HTML dan XML. Ini cepat dan cukup fungsional, tetapi tidak dapat membuat permintaan GET sendiri, jadi Anda memerlukan perpustakaan tambahan, misalnya. B. Permintaan untuk melakukan pertanyaan.
Keuntungan
Keunggulan Lxml antara lain sebagai berikut:
- Operasi cepat.
- Untuk bekerja dengan baik dengan lxml, tidak peduli seberapa bagus struktur situsnya.
- Dukungan untuk transformasi XSLT.
- Bekerja sama baiknya dengan pemilih CSS seperti halnya dengan XPath.
Hasilnya, perpustakaan lxml membuat pohon data yang sangat nyaman.
Kekurangan
Namun, ada juga kelemahannya:
- Ini adalah perpustakaan yang rumit dan tidak cocok untuk pemula.
- Konsumsi memori tinggi.
- Kurangnya banyak contoh dan kurangnya komunitas yang aktif.
Oleh karena itu, perpustakaan biasanya digunakan untuk tugas-tugas tertentu.
menggunakan
Seperti disebutkan di atas, lxml tidak selalu digunakan. Karena kekurangannya, perpustakaan ini hanya digunakan ketika diperlukan untuk mengurai pohon situs dengan struktur yang salah atau dokumen XML. Hal ini karena dalam hal ini dapat mengatasi tugas lebih baik dibandingkan perpustakaan lain.
Menginstal perpustakaan Lxml
Instalasi dilakukan melalui pip install:
pip install lxml
Setelah menjalankan perintah, Anda dapat mulai bekerja dengan perpustakaan yang diinstal.
Menggunakan perpustakaan Lxml
Untuk memahami cara kerja perpustakaan ini, kita perlu mengambil dan memproses data dari situs. Untuk menjalankan permintaan kami menggunakan perpustakaan Permintaan:
import requests
data = requests.get('https://quotes.toscrape.com')
Untuk bekerja dengan halaman HTML, kami mengimpor modul khusus perpustakaan XML:
from lxml import html
Masukkan struktur situs ke dalam variabel:
tree = html.fromstring(data.content)
Kami sekarang dapat menampilkan ini, tetapi kemudian kami mendapatkan semua kode halaman tersebut. Jadi mari kita lanjutkan ke pemrosesan lebih lanjut.
Pengolahan data dengan Lxml
Kita dapat menggunakan pemilih XPath atau CSS untuk memilih data tertentu. Karena untuk bekerja dengan penyeleksi CSS kita perlu mengimpor modul lxml tambahan cssselect, kita memilih tanda kutip menggunakan xpath dan menampilkan hasilnya:
quotes = tree.xpath('//div(@class="quote")/span(@class="text")/text()')
print(quotes)
Hasil:
D:\scripts>lxml_test.py
('“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”', '“It is our choices, Harry, that show what we truly are, far more than our abilities.”', '“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”', '“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”', "“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”", '“Try not to become a man of success. Rather become a man of value.”', '“It is better to be hated for what you are than to be loved for what you are not.”', "“I have not failed. I've just found 10,000 ways that won't work.”", "“A woman is like a tea bag; you never know how strong it is until it's in hot water.”", '“A day without sunshine is like, you know, night.”')
Untuk menampilkan elemen demi elemen dari baris baru, kami mengubah metode keluaran:
for quote in quotes:
print(quote)
Outputnya sekarang berada di baris baru. Semua kode skrip:
import requests
from lxml import html
data = requests.get('https://quotes.toscrape.com')
tree = html.fromstring(data.content)
quotes = tree.xpath('//div(@class="quote")/span(@class="text")/text()')
for quote in quotes:
print(quote)
Dari sini kita dapat menyimpulkan bahwa lxml menguasai fungsinya dengan cukup baik.
Sup yang enak4
BeautifulSoup4, atau sederhananya BS4, adalah perpustakaan yang dibuat untuk penguraian sumber daya. Meskipun kita bisa menggunakan dua perpustakaan sebelumnya untuk mengambil data menggunakan kueri, BS4 digunakan untuk memproses data yang dihasilkan. Struktur HTML dan XML cocok untuk diproses.
Perpustakaan ini tidak dapat digunakan sendiri. Dibutuhkan perpustakaan tambahan untuk menjalankan kueri. Pada artikel ini kami akan menggunakan perpustakaan Permintaan, tetapi Anda dapat menggunakan perpustakaan lainnya.
Keuntungan
BS4 adalah perpustakaan luar biasa yang memungkinkan Anda memproses halaman web dan mengambil data dengan cepat dan mudah. Ini memiliki beberapa keunggulan:
- Ini dapat bekerja dengan struktur HTML dan XML.
- Ramah bagi pemula. Mudah dipelajari dan cocok bahkan untuk pemula karena sintaksnya yang sederhana.
- Ada sejumlah pilihan pencarian: berdasarkan nama, berdasarkan ID, berdasarkan atribut (misalnya kelas) dan berdasarkan teks.
- Ini tidak memerlukan banyak sumber daya.
- Memiliki fitur yang terdokumentasi dengan baik.
Dan beautifulsoup dapat menangani halaman kecil dan besar.
Kekurangan
Sehubungan dengan fungsionalitas dan tugas perpustakaan, beberapa kelemahan juga dapat disoroti:
- Ini hanya berfungsi dengan halaman statis. Sayangnya, BS4 tidak mendukung browser tanpa kepala dan oleh karena itu tidak dapat bekerja dengan situs web dinamis.
- Pustaka ini pada dasarnya tidak dirancang untuk pembuatan kueri dan oleh karena itu tidak dapat digunakan untuk pengikisan mandiri.
- Jika struktur halamannya membingungkan, ini bisa bekerja dengan sangat tidak akurat.
menggunakan
Pustaka sup yang indah dirancang untuk memproses kode XML atau HTML yang telah Anda terima. Ia melakukan pekerjaan yang sangat baik dalam menerima, mencari, dan memproses data.
Namun, agar dapat berfungsi dengan baik, ini harus digunakan dengan perpustakaan kueri: UrlLib, Permintaan, atau http.klien.
Menginstal perpustakaan BeautifulSoup4
Pustaka ini belum diinstal sebelumnya, sehingga dapat diinstal dengan pip install:
pip install beautifulsoup4
Setelah instalasi, sebuah pesan muncul tentang proses yang berhasil:
D:\scripts>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading beautifulsoup4-4.12.0-py3-none-any.whl (132 kB)
---------------------------------------- 132.2/132.2 kB 865.1 kB/s eta 0:00:00
Requirement already satisfied: soupsieve>1.2 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from beautifulsoup4) (2.3.2.post1)
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.12.0
Jika semuanya berjalan dengan baik, mari beralih ke bagian berikutnya - penerapan praktis perpustakaan.
Menggunakan perpustakaan BeautifulSoup4
Pertama, mari buat file dengan ekstensi *.py, sambungkan perpustakaan yang diperlukan dan dapatkan kode halaman. Kami telah melakukan ini sebelumnya, jadi kami tidak akan membahasnya secara detail:
import requests
from bs4 import BeautifulSoup
data = requests.get('https://example.com')
Sekarang kita perlu memproses kode ini menggunakan perpustakaan BS4:
soup = BeautifulSoup(data.text, "html.parser")
Untuk memastikan semuanya baik-baik saja, kami menampilkan hasilnya:
D:\scripts>bs4_test.py
<!DOCTYPE html>
<html>
<head>
<title>Contoh domain</title>
<style type="text/css">
…
</style>
</head>
<body>
<div>
<h1>Contoh domain</h1>
<p>Domain ini untuk digunakan dalam contoh ilustratif dalam dokumen. Anda dapat menggunakan domain ini dalam literatur tanpa koordinasi sebelumnya atau meminta izin.</p>
<p><a href="https://www.iana.org/domains/example">Informasi lebih lanjut...</a></p>
</div>
</body>
</html>
Di permukaan, hasilnya tidak berbeda dengan menjalankan kueri dan menampilkan konten di layar, tapi itu tidak benar. Dengan memproses kode dengan perpustakaan BS4, kita dapat dengan cepat mengambil data tanpa menggunakan ekspresi reguler.
Pengolahan data dengan BS4
Cara termudah adalah mencari data menggunakan tag. Mari kita lihat judul dan isinya -Cari tag. Artinya, kita akan melakukan hal yang sama seperti ekspresi reguler, hanya menggunakan perpustakaan BS4:
titles = soup.find('h1').text
href = soup.find('a').get("href")
Jika ada beberapa header atau tautan, kita dapat menggunakan sup.find_all alih-alih sup.find. Selain itu, BS4 secara opsional menawarkan kemampuan untuk mencari berdasarkan kelas. Untuk contoh ini, halaman pengujian sederhana tidak cukup bagi kami, jadi kami akan menggunakan https://quotes.toscrape.com sebagai contoh.
Kutipan ada di tag dan memiliki kelas "teks". Mari kita atur parameter ini dalam kode kita:
soup.find_all('span', class_='text')
Namun, kode ini mencetak semua tanda kutip beserta tag:
D:\scripts>bs4_test.py (<span class="text" itemprop="text">“Dunia yang kita ciptakan adalah proses berpikir kita. “Hal ini tidak dapat diubah tanpa mengubah pemikiran kita.”</span>, <span class="text" itemprop="text">“Pilihan kitalah, Harry, yang menunjukkan siapa kita sebenarnya, lebih dari kemampuan kita.”</span>, <span class="text" itemprop="text">“Hanya ada dua cara untuk menjalani hidup Anda. Yang pertama adalah seolah-olah tidak ada keajaiban. Yang lainnya adalah seolah-olah semuanya adalah keajaiban.”</span>, <span class="text" itemprop="text">“Orang, baik pria atau wanita, yang tidak menyukai novel bagus, pasti sangat bodoh.”</span>, <span class="text" itemprop="text">“Ketidaksempurnaan adalah keindahan, kegilaan adalah kejeniusan dan lebih baik menjadi konyol daripada membosankan.”</span>, <span class="text" itemprop="text">“Cobalah untuk tidak menjadi orang sukses. Lebih baik jadilah orang yang bernilai.”</span>, <span class="text" itemprop="text">“Lebih baik dibenci karena dirimu yang sebenarnya daripada dicintai karena apa yang bukan dirimu.”</span>, <span class="text" itemprop="text">“Saya tidak gagal. Saya baru saja menemukan 10.000 cara yang tidak akan berhasil.”</span>, <span class="text" itemprop="text">“Wanita itu seperti kantong teh; “Anda tidak akan pernah tahu seberapa kuatnya sampai ia dimasukkan ke dalam air panas.”</span>, <span class="text" itemprop="text">“Siang tanpa sinar matahari bagaikan malam.”</span>)
Untuk mengatasi masalah ini, kami memeriksa semua data baris demi baris dan hanya memilih konten:
for result in text:
print(result.text)
Hasil skripnya:
D:\scripts>bs4_test.py
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”
Kode skrip:
import requests
from bs4 import BeautifulSoup
data = requests.get()
soup = BeautifulSoup(data.text, "html.parser")
text = soup.find_all('span', class_='text')
for result in text:
print(result.text)
Fleksibilitas dan keserbagunaan inilah yang membuat perpustakaan BS4 begitu populer.
selenium
Selenium adalah pustaka Python 3 terkenal yang digunakan untuk pengujian dan pengikisan. Ini bagus untuk mensimulasikan perilaku pengguna sebenarnya, yang membantu menghindari pemblokiran.
Saat menggunakan Selenium, driver web diluncurkan yang mensimulasikan perilaku browser.
Keuntungan
Selenium adalah perpustakaan seimbang yang cocok untuk pemula dan profesional. Ini memiliki keuntungan sebagai berikut:
- Ini mendukung bekerja dengan browser tanpa kepala dan dapat mengekstrak data dinamis.
- Mendukung berbagai cara untuk mencari data, baik berdasarkan atribut maupun menggunakan XPath.
- Mendukung kemampuan untuk berinteraksi dengan elemen pada halaman (misalnya tombol atau kolom input dalam aplikasi web).
- Ini menyediakan perpustakaan analog untuk semua bahasa pemrograman umum.
Terlepas dari semua yang disebutkan di atas, perpustakaan ini cukup sederhana dan menyenangkan untuk digunakan. Itulah sebabnya mengenalnya tidak menimbulkan banyak kesulitan.
Kekurangan
Faktanya, tidak banyak kerugiannya:
- Karena driver web dipanggil untuk menjalankan skrip, ini memerlukan banyak sumber daya.
- Pengikisan dan tindakan lainnya hanya dilakukan setelah halaman dimuat sepenuhnya, dan ini bisa memakan waktu cukup lama.
Jika tidak, perpustakaan tidak memiliki kelemahan mencolok seperti itu.
menggunakan
Selenium digunakan untuk pengujian otomatis dan sangat bagus untuk menghapus situs web yang menggunakan JavaScript. Dengan browser tanpa kepala, Anda berhasil mengumpulkan data dari situs web dinamis.
Ini juga bagus untuk kasus di mana Anda perlu melakukan beberapa tindakan sebelum melakukan pengikisan, seperti: B. mengklik tombol atau masuk.
Instal Selenium
Seperti perpustakaan lainnya, Selenium dapat diinstal menggunakan pip install:
pip install selenium
Setelah itu, dapat diimpor ke dalam kode dan digunakan seperti perpustakaan lainnya.
Selenium memerlukan driver web agar dapat berfungsi. Versinya harus sama dengan browser Chrome. Ekstrak webdriver ke drive C. Kita akan membutuhkannya nanti.
Penggunaan Selenium
Sebelum Anda mulai menggunakan Selenium, Anda harus memahami bagaimana beberapa halaman web disimpan dan bagaimana pengembang menolak pengikisan.
Cara utama untuk menghentikan scraping adalah dengan menambahkan kode Javascript yang dijalankan setelah halaman dimuat dan mengambil data secara dinamis. Dalam hal ini, perpustakaan yang kita lihat sebelumnya akan mengembalikan permintaan kosong atau permintaan yang berisi kode Javascript tetapi bukan konten halaman.
Dalam kasus Selenium, permintaan mengembalikan konten karena WebDriver menunggu halaman dimuat sepenuhnya dan baru kemudian melakukan tindakan yang diperlukan.
Buat file dengan ekstensi *.py dan tambahkan Selenium WebDriver:
from selenium import webdriver
Untuk membuatnya berfungsi, kami menentukan jalur tempat kami membongkar WebDriver:
DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
Sekarang mari kita ambil data dari halaman:
driver.get("https://quotes.toscrape.com/")
Setelah halaman diterima, Anda dapat mengerjakannya dan memfilter informasi yang diperlukan. Agar skrip menyelesaikan pekerjaannya dengan benar, Anda harus menutup WebDriver di akhir:
driver.close()
Kode skrip:
from selenium import webdriver
DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
text = driver.get("https://quotes.toscrape.com/")
driver.close()
Pemrosesan data dengan Selenium
Mari kita ekstrak kembali tanda kutipnya. Untuk ini kita memerlukan modul By dari perpustakaan Selenium. Mari kita impor:
from selenium.webdriver.common.by import By
Sekarang kita dapat menggunakan perpustakaan yang terhubung untuk memproses dan mencari data yang kita butuhkan. Cara termudah untuk memilih kutipan adalah dengan menggunakan pemilih CSS.
Selain penyeleksi CSS, Selenium juga mendukung metode berikut:
- PENGENAL. Cari berdasarkan ID item.
- NAMA BELAKANG. Cari berdasarkan nama elemen.
- XPath. Cari XPath.
- TEKS TAUTAN. Cari teks tautan.
- PARTIAL_LINK_TEXT. Telusuri sebagian teks tautan.
- HUBUNGKAN NAMA. Cari berdasarkan nama tag.
- NAMA KELAS. Cari berdasarkan nama kelas.
- CSS_SELECTOR. Cari pemilih CSS.
Temukan kutipan menggunakan pemilih CSS span.text dan simpan dalam variabel teks:
text = driver.find_element(By.CSS_SELECTOR, "span.text")
Lihat variabel dan pastikan semuanya berfungsi dengan baik:
D:\scripts>selenium_test.py
D:\scripts\selenium_test.py:5: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
DevTools listening on ws://127.0.0.1:52684/devtools/browser/fe204bdd-2d10-47ca-999e-ddf22d5c3854
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”
Kode skrip:
from selenium import webdriver
from selenium.webdriver.common.by import By
DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
driver.get("https://quotes.toscrape.com/")
text = driver.find_elements(By.CSS_SELECTOR, "span.text")
for res in text:
print(res.text)
driver.close()
Dengan demikian, Selenium adalah perpustakaan kaya fitur yang mengurangi risiko pemblokiran selama pengikisan. Ini juga berguna untuk data scientist atau bot penulis.
Tdk lengkap
Scrapy adalah kerangka web scraping sumber terbuka yang ideal untuk proyek besar atau skalabel. Ini memiliki kemampuan bawaan untuk membuat pencakar, secara otomatis menyesuaikan kecepatan pengikisan, dan memungkinkan Anda menyimpan data keluaran dalam format JSON, CSV, dan XML menggunakan alat bawaan. Selain itu, Scrapy mengeksekusi kueri secara asinkron, memungkinkan Anda menjalankannya lebih cepat.
Berbeda dengan opsi sebelumnya, lebih baik membuat scraper dengan Scrapy menggunakan fungsionalitas bawaan.
Keuntungan
Kerangka kerja ini menawarkan keuntungan sebagai berikut:
- Cocok untuk proyek apa pun, bahkan proyek yang skalabel.
- Dapat membuat perayap web terpisah dalam proyek yang sama, masing-masing bertanggung jawab atas tugasnya sendiri.
- Mendukung pembuatan seluruh proyek dengan pengaturan bersama dan terpisah, aturan pengunggahan, pengecualian dan skrip.
- Itu tidak sinkron.
Sayangnya framework web scraping ini cukup sulit untuk pemula.
Kekurangan
Kekurangan Scrapy antara lain:
- Kompleksitas pekerjaan yang tinggi untuk pemula.
- Konsumsi sumber daya yang tinggi.
- Tidak cocok untuk menggores situs web dinamis.
Oleh karena itu, scrapy jarang digunakan dan biasanya digunakan untuk proyek yang memerlukan skala besar.
menggunakan
Scrapy adalah kerangka scraping khusus untuk perayapan web. Ini bagus untuk proyek besar dan skalabel yang memerlukan subdivisi berdasarkan arah pengikisan. Karena kemampuannya membuat beberapa perayap web dalam satu proyek, Scrapy sangat populer, meskipun sulit digunakan.
Instal Scrapy
Untuk menginstal gunakan pip install:
pip install scrapy
Setelah itu Anda bisa bekerja dengan Scrapy.
Gunakan Scrapy
Untuk melanjutkan membuat scraper, masukkan perintah pada baris perintah untuk membuat proyek baru:
scrapy startproject scrapy_test
Jika semuanya dilakukan dengan benar, maka akan muncul tampilan berikut:
D:\scripts>scrapy startproject scrapy_test
New Scrapy project 'scrapy_test', using template directory 'C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\scrapy\templates\project', created in:
D:\scripts\scrapy_test
You can start your first spider with:
cd scrapy_test
scrapy genspider example example.com
Sekarang masuk ke direktori proyek dengan perintah:
cd scrapy_test
File-file berikut secara otomatis dibuat di direktori:
- Item.py. File ini menjelaskan kelas-kelas.
- Saluran pipa.py. Jelaskan tindakan yang terjadi saat Anda membuka atau menutup laba-laba. Anda juga dapat menentukan bagaimana data disimpan.
- Pengaturan.py. File ini berisi pengaturan pengguna untuk spider.
- Menjadi gila. Folder tempat laba-laba proyek yang dipilih disimpan.
Kemudian dalam proyek ini kita membuat laba-laba dasar:
scrapy genspider quotes quotes.toscrape.com
Kode file yang dibuat secara otomatis:
import scrapy
class QuotesSpider(scrapy.Spider):
name="quotes"
allowed_domains = ('quotes.toscrape.com')
start_urls = ('http://quotes.toscrape.com/')
def parse(self, response):
pass
Pemrosesan data dengan Scrapy
Blok def parse(self, respon) menjelaskan elemen yang perlu dihapus. Scrapy mendukung penyeleksi CSS dan XPath. Mari kita lakukan dengan XPath:
item = DemoItem()
item("text") = response.xpath("span(@class="text")/text()").extract()
return items
Kode skrip lengkap:
import scrapy
class QuotesSpider(scrapy.Spider):
name="quotes"
allowed_domains = ('quotes.toscrape.com')
start_urls = ('http://quotes.toscrape.com/')
def parse(self, response):
item = DemoItem()
item("text") = response.xpath("span(@class="text")/text()").extract()
return items
orang pyppeteer
Pustaka terakhir dalam daftar adalah versi Python dari pustaka NodeJS yang terkenal – Puppeteer. Seperti Selenium, Pyppeteer memungkinkan kita mensimulasikan perilaku pengguna dan bekerja dengan JavaScript.
Keuntungan
Perpustakaan ini menawarkan sejumlah keunggulan:
- Ada analog di NodeJS yang sangat populer.
- Memiliki komunitas yang sangat aktif dan dokumentasi yang ditulis dengan baik.
- Berkat penggunaan browser tanpa kepala, ini bagus untuk menggores halaman dinamis.
Bagi yang sudah terbiasa menggunakannya di NodeJS, akan sangat nyaman untuk bekerja dengannya.
Kekurangan
Sayangnya, ada juga kelemahannya:
- Ini awalnya adalah perpustakaan NodeJS dan oleh karena itu tidak banyak contoh dengan Python.
- Cukup rumit untuk pemula.
- Intensif sumber daya.
Namun, terlepas dari segala kekurangannya, hal ini patut mendapat perhatian.
menggunakan
Bagus untuk proyek besar. Pustaka ini juga layak digunakan jika Anda perlu mengekstrak data dinamis.
Fungsionalitasnya yang luar biasa membuatnya cocok untuk sebagian besar tugas, seperti ekstraksi data atau penguraian dokumen HTML.
Instal Pyppeteer
Instal perpustakaan melalui pip install:
pip install pyppeteer
Secara umum perpustakaan ini juga menggunakan perpustakaan Asyncio, jadi disarankan untuk menginstalnya juga:
pip install asyncio
Menggunakan Pyppeteer
Pertama, buat file dengan ekstensi *.py dan impor perpustakaan yang diperlukan:
import asyncio
from pyppeteer import launch
Mari tambahkan fungsi asinkron untuk mendapatkan kode negara dan menampilkan kodenya:
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://quotes.toscrape.com')
html = await page.content()
print(html)
await browser.close()
Mari kita jalankan kodenya dan lihat apa hasilnya. Saat pertama kali digunakan, Chromium dapat memuat:
D:\scripts\pyppeteer_test.py:12: DeprecationWarning: There is no current event loop
asyncio.get_event_loop().run_until_complete(main())
(INFO) Starting Chromium download.
4%|██
Ini akan menjalankan kode yang menampilkan semua kode halaman:
D:\scripts>pyppeteer_test.py D:\scripts\pyppeteer_test.py:12: DeprecationWarning: Tidak ada loop peristiwa saat ini asyncio.get_event_loop().run_until_complete(main()) (INFO) Memulai pengunduhan Chromium. 100%|█████████████████████████████████████ ███████████ ████████████████████████████████| 137M/137M (06:26<00:00, 354kb/s)
(INFO) Beginning extraction
(INFO) Chromium extracted to: C:\Users\user\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>Kutipan tentang Scrape</title>
<link rel="stylesheet" href="https://scrape-it.cloud/static/bootstrap.min.css">
<link rel="stylesheet" href="http://scrape-it.cloud/static/main.css">
</head>
<body>
<div class="container">
<div class="row header-box">
<div class="col-md-8">
<h1>
<a href="https://scrape-it.cloud/">Kutipan tentang Scrape</a>
</h1>
…
Pemrosesan data dengan Pyppeteer
Anda juga dapat menggunakan pemilih CSS untuk memilih data tertentu. Mari kita pilih kutipan saja:
text = await page.querySelectorAll("span.text")
for t in text:
qout = await t.getProperty("textContent")
print(await qout.jsonValue())
Hasil eksekusi:
D:\scripts>pyppeteer_test.py
D:\scripts\pyppeteer_test.py:15: DeprecationWarning: There is no current event loop
asyncio.get_event_loop().run_until_complete(main())
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”
Kode skrip lengkap:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://quotes.toscrape.com')
html = await page.content()
text = await page.querySelectorAll("span.text")
for t in text:
qout = await t.getProperty("textContent")
print(await qout.jsonValue())
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Oleh karena itu, Pyppeteer adalah pilihan yang baik jika Anda perlu mensimulasikan perilaku pengguna sebenarnya atau mengekstrak data dalam jumlah besar dengan cepat.
Kesimpulan dan temuan
Mari kita berikan tabel perbandingan untuk memudahkan dalam memilih alat yang tepat:
perpustakaan | Mudah digunakan | Pertunjukan | dukungan JavaScript |
---|---|---|---|
urllib | Mudah digunakan | Cepat untuk permintaan kecil, namun lebih lambat untuk scraping skala besar | TIDAK |
Permintaan | Mudah digunakan | Cepat untuk permintaan kecil, namun lebih lambat untuk scraping skala besar | TIDAK |
lxml | Mudah digunakan | Sangat cepat untuk parsing dan mengedit XML dan HTML | TIDAK |
Kikis-It.Cloud | Mudah digunakan | Sangat cepat untuk menggores sumber daya web | Ya |
Sup yang enak4 | Mudah digunakan | Lebih lambat dibandingkan beberapa perpustakaan lain untuk pengikisan skala besar, namun masih cepat untuk sebagian besar kasus penggunaan | TIDAK |
selenium | Bisa jadi rumit untuk pemula | Relatif lebih lambat karena overhead penggunaan driver web, tetapi menawarkan emulasi browser penuh | Ya |
Tdk lengkap | Bisa jadi rumit untuk pemula | Sangat cepat dan terukur untuk proyek scraping besar | TIDAK |
orang pyppeteer | Bisa jadi rumit untuk pemula, memerlukan pengetahuan tentang JavaScript dan otomatisasi browser | Relatif lebih lambat karena overhead penggunaan browser, namun menawarkan emulasi browser penuh | Ya |
Jika Anda seorang pemula, lihat lebih dekat perpustakaan khusus untuk scraping untuk menghindari pemblokiran. Ini akan membantu Anda lebih memahami cara menulis scraper.
Jika Anda ingin mempelajari cara menulis scraper sendiri, Python adalah pilihan yang ideal - cukup mudah dipelajari dan memiliki beragam alat.
Mengikis dengan Python adalah tugas yang relatif sederhana, apa pun pilihan Anda: Anda menggunakan konstruktor atau menulis kode Anda sendiri menggunakan salah satu pustaka pengikisan yang populer.
Pertanyaan Umum
Apakah Python bagus untuk web scraping?
Python bagus untuk web scraping dan pemrosesan data secara umum. Ini memiliki banyak fungsi dan perpustakaan yang ditujukan untuk mengumpulkan dan memproses data dalam jumlah besar, dan sangat cocok untuk menulis skrip kecil yang fungsional.
Apakah Scrapy lebih baik daripada BeautifulSoup?
Scrapy dan BeautifulSoup keduanya berguna untuk tugas yang berbeda. Scrapy lebih cocok untuk proyek yang berskala atau besar, sedangkan BeautifulSoup lebih cocok untuk proyek yang tidak perlu mengambil data dari situs web, melainkan mencari dan memprosesnya berdasarkan data yang sudah dikumpulkan.
Apa perpustakaan/kerangka kerja Python terbaik untuk web scraping?
Salah satu perpustakaan terbaik untuk fungsionalitas adalah Selenium. Cocok untuk hampir semua tugas, termasuk pengumpulan data dinamis. Jika data hanya perlu diproses dan tidak diambil, BS4 atau Lxml akan menjadi pilihan terbaik.
Apakah Selenium lebih baik dari BeautifulSoup?
Selenium memiliki rangkaian fitur yang lebih luas daripada BeautifulSoup. Tidak seperti BeautifulSoup, ini memungkinkan pengikisan situs web dengan JavaScript, menggunakan browser tanpa kepala, dan mengirimkan permintaan. Namun BeautifulSoup lebih sederhana dan cocok untuk pemula.