Beranda BlogPengikisan web 8 Library dan Alat Python Terbaik untuk Web Scraping pada tahun 2023

8 Library dan Alat Python Terbaik untuk Web Scraping pada tahun 2023

oleh Kadek

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.

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:

  1. Mengatur dan mendukung aliran aman.
  2. Verifikasi SSL/TLS di sisi klien.
  3. Dukungan kumpulan koneksi.
  4. Membuat kueri berulang.
  5. 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:

  1. Ia tidak tahu cara memproses data, jadi tidak cocok untuk digores sebagai perpustakaan independen.
  2. Dibandingkan dengan perpustakaan Permintaan, ini tidak ramah pengguna.
  3. 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&gt;urllib3_test.py b&#039;<!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&#039;

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&gt;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&#039;<h1>(.+?)</h1>&#039;, data)

Hasil skrip:

('Example Domain')

Kode skrip lengkap:

impor urllib3 impor kembali http = urllib3.PoolManager() resp = http.request(&#039;GET&#039;, &#039;https://example.com&#039;) data = resp.data.decode(&#039;utf-8&#039;) print(re.findall (R&#039;<h1>(.+?)</h1>&#039;, 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:

  1. Ini didasarkan pada urllib3 dan httplib dan karenanya memiliki semua fiturnya.
  2. Jauh lebih mudah digunakan daripada UrlLib3.
  3. Mendukung permintaan HEAD, POST, PUT, PATCH dan DELETE.
  4. 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:

  1. Itu tidak dapat melakukan pemrosesan data, sehingga sangat tidak praktis untuk menggunakannya sebagai solusi mandiri untuk pengikisan.
  2. 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(&#039;https://example.com&#039;).text) Hasil eksekusi: D:\scripts&gt;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:

  1. Ini memiliki sintaks sederhana yang bahkan dapat digunakan oleh pemula.
  2. Ini memungkinkan penggunaan proxy (server perumahan dan pusat data).
  3. Ini menghapus situs web dinamis yang menggunakan JavaScript.
  4. 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:

  1. 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&gt;scrape_test.py {&quot;status&quot;:&quot;ok&quot;,&quot;scrapingResult&quot;:{&quot;content&quot;:&quot;<!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&gt;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:

  1. Operasi cepat.
  2. Untuk bekerja dengan baik dengan lxml, tidak peduli seberapa bagus struktur situsnya.
  3. Dukungan untuk transformasi XSLT.
  4. Bekerja sama baiknya dengan pemilih CSS seperti halnya dengan XPath.

Hasilnya, perpustakaan lxml membuat pohon data yang sangat nyaman.

Kekurangan

Namun, ada juga kelemahannya:

  1. Ini adalah perpustakaan yang rumit dan tidak cocok untuk pemula.
  2. Konsumsi memori tinggi.
  3. 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:

  1. Ini dapat bekerja dengan struktur HTML dan XML.
  2. Ramah bagi pemula. Mudah dipelajari dan cocok bahkan untuk pemula karena sintaksnya yang sederhana.
  3. Ada sejumlah pilihan pencarian: berdasarkan nama, berdasarkan ID, berdasarkan atribut (misalnya kelas) dan berdasarkan teks.
  4. Ini tidak memerlukan banyak sumber daya.
  5. 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:

  1. Ini hanya berfungsi dengan halaman statis. Sayangnya, BS4 tidak mendukung browser tanpa kepala dan oleh karena itu tidak dapat bekerja dengan situs web dinamis.
  2. Pustaka ini pada dasarnya tidak dirancang untuk pembuatan kueri dan oleh karena itu tidak dapat digunakan untuk pengikisan mandiri.
  3. 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&gt;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&gt;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:

  1. Ini mendukung bekerja dengan browser tanpa kepala dan dapat mengekstrak data dinamis.
  2. Mendukung berbagai cara untuk mencari data, baik berdasarkan atribut maupun menggunakan XPath.
  3. Mendukung kemampuan untuk berinteraksi dengan elemen pada halaman (misalnya tombol atau kolom input dalam aplikasi web).
  4. 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:

  1. Karena driver web dipanggil untuk menjalankan skrip, ini memerlukan banyak sumber daya.
  2. 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:

  1. PENGENAL. Cari berdasarkan ID item.
  2. NAMA BELAKANG. Cari berdasarkan nama elemen.
  3. XPath. Cari XPath.
  4. TEKS TAUTAN. Cari teks tautan.
  5. PARTIAL_LINK_TEXT. Telusuri sebagian teks tautan.
  6. HUBUNGKAN NAMA. Cari berdasarkan nama tag.
  7. NAMA KELAS. Cari berdasarkan nama kelas.
  8. 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:

  1. Cocok untuk proyek apa pun, bahkan proyek yang skalabel.
  2. Dapat membuat perayap web terpisah dalam proyek yang sama, masing-masing bertanggung jawab atas tugasnya sendiri.
  3. Mendukung pembuatan seluruh proyek dengan pengaturan bersama dan terpisah, aturan pengunggahan, pengecualian dan skrip.
  4. Itu tidak sinkron.

Sayangnya framework web scraping ini cukup sulit untuk pemula.

Kekurangan

Kekurangan Scrapy antara lain:

  1. Kompleksitas pekerjaan yang tinggi untuk pemula.
  2. Konsumsi sumber daya yang tinggi.
  3. 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:

  1. Item.py. File ini menjelaskan kelas-kelas.
  2. Saluran pipa.py. Jelaskan tindakan yang terjadi saat Anda membuka atau menutup laba-laba. Anda juga dapat menentukan bagaimana data disimpan.
  3. Pengaturan.py. File ini berisi pengaturan pengguna untuk spider.
  4. 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:

  1. Ada analog di NodeJS yang sangat populer.
  2. Memiliki komunitas yang sangat aktif dan dokumentasi yang ditulis dengan baik.
  3. 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:

  1. Ini awalnya adalah perpustakaan NodeJS dan oleh karena itu tidak banyak contoh dengan Python.
  2. Cukup rumit untuk pemula.
  3. 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&gt;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.

Pos terkait

Tinggalkan Komentar