Panduan Pengikisan Web Dengan Python Menggunakan Sup Cantik

Diterbitkan: 2020-06-23
Daftar Isi menunjukkan
Pengantar Web Scraping Dengan Python:
Bagaimana cara kerja BeautifulSoup?
Bagaimana Mengikis Data Dari Halaman Web Menggunakan BeautifulSoup?
Proses Pengikisan Web:
Kesimpulan:

Pengantar Web Scraping Dengan Python:

Ketika datang ke web scraping, beberapa bahasa pemrograman lebih disukai daripada yang lain. Salah satu yang paling populer di antara ini adalah Python. Selain menjadi salah satu bahasa yang paling mudah dipelajari karena kurva pembelajarannya yang lebih lembut, bahasa ini juga memiliki keuntungan menjadi bahasa dengan dukungan pengembang yang besar- yang telah menghasilkan banyak paket pihak ketiga. Paket-paket ini dapat digunakan untuk beberapa fungsi, yang mungkin sulit dilakukan dengan inti Python. Beberapa contoh umum adalah- untuk pemrosesan gambar atau visi komputer, kami menggunakan OpenCV, untuk pembelajaran mesin, kami menggunakan TensorFlow dan untuk merencanakan grafik, kami menggunakan MatplotLib. Ketika datang ke web scraping, salah satu library yang paling umum digunakan adalah BeautifulSoup. Perpustakaan ini tidak secara khusus mengikis data dari internet, tetapi jika Anda bisa mendapatkan file HTML dari halaman web, itu dapat membantu mengekstrak titik data tertentu darinya. Secara umum, perpustakaan digunakan untuk mengekstrak titik data dari dokumen XML dan HTML.

Bagaimana cara kerja BeautifulSoup?

Sebelum Anda melanjutkan menulis kode dengan Python, Anda harus memahami cara kerja BeautifulSoup. Setelah Anda mengekstrak konten HTML dari halaman web dan menyimpannya dalam variabel, katakanlah html_obj, Anda kemudian dapat mengubahnya menjadi objek BeautifulSoup hanya dengan satu baris kode-

soup_obj = BeautifulSoup(html_obj, 'html.parser')

Dimana html_obj adalah data HTML, soup_obj adalah objek bs yang telah diperoleh dan “html.parser” adalah parser yang digunakan untuk melakukan konversi. Setelah Anda memiliki objek bs, yang disebut soup_obj, melintasinya sangat mudah, dan karena melintasinya cukup mudah, ekstraksi data juga menjadi sederhana. Mari kita ambil contoh. Katakanlah Anda perlu mengambil titik data yang disebut judul produk, yang ada di setiap halaman situs web eCommerce. Sekarang Anda mengunduh satu halaman produk HTML dari situs web itu dan menyadari bahwa setiap halaman memiliki nama produk yang disebutkan pada elemen rentang tipe yang memiliki id sebagai productTitle. Jadi bagaimana Anda mengambil data ini dari katakanlah 1000 halaman produk? Nah, Anda akan mendapatkan data HTML untuk setiap halaman, dan mengambil titik data dengan cara ini-

untuk span di soup.findAll('span', attrs={'id': 'productTitle'}):
name_of_product = spans.text.strip()

Meskipun ini adalah cara untuk mendapatkan data tekstual yang ada di antara elemen tag tertentu, Anda juga dapat mengambil data dari atribut tag.

Pengikisan Web

Bagaimana Mengikis Data Dari Halaman Web Menggunakan BeautifulSoup?

Sekarang kita memiliki beberapa pemahaman dasar tentang bagaimana objek bs dilintasi, mari kita menulis beberapa kode, dan melihat cara kerjanya. Dengan menggunakan cuplikan kode di bawah ini, Anda dapat mengikis data dari Zillow, pasar real estat terkemuka yang berbasis di AS dengan sangat mudah. Anda dapat menjalankan kode ini dan memasukkan URL cantuman, untuk mendapatkan data keluaran dalam format JSON. Mari kita pahami kodenya, baris demi baris. Hal pertama yang pertama, pastikan Anda telah menginstal Python 3.7 atau lebih tinggi di mesin Anda. Gunakan pip untuk menginstal BeautifulSoup. Semua paket lain sudah dibundel dengan Python, jadi Anda tidak perlu menginstalnya. Setelah selesai, instal editor kode seperti Atom atau VS Code, dan Anda siap untuk pergi. Memahami kode itu penting dan karenanya kita akan mulai dari baris pertama. Anda memerlukan empat pernyataan impor untuk fungsionalitas tertentu. Selanjutnya, Anda memiliki tiga baris yang dimulai dengan "ctx". Ini khusus untuk mengabaikan kesalahan Sertifikat SSL yang mungkin Anda hadapi saat mengakses situs web melalui kode Anda. Selanjutnya kita ambil URL website sebagai masukan dari pengguna. Di sini Anda juga dapat membuat hardcode URL, atau bahkan memiliki larik beberapa URL.

Proses Pengikisan Web:

Selanjutnya, kita mengakses halaman web menggunakan fungsi Request dari urllib. Pastikan untuk menambahkan User-Agent di header untuk membuat situs web percaya bahwa Anda menggunakan browser. Alasan di balik melakukan ini adalah bahwa situs web dimaksudkan untuk diakses oleh browser dan bukan kode, dan karenanya mereka dapat memblokir IP Anda jika mereka menangkap Anda. Setelah ini selesai, kami telah menyelesaikan semua langkah dasar dan selanjutnya, kami akan mengonversi objek HTML menjadi objek bs, dan kemudian mempercantiknya ke dalam format utf-8, untuk menangani karakter dan simbol khusus di halaman web. Setelah ini selesai, kami mengekstrak judul, detail singkat, dan properti lainnya dengan mengurai objek bs. Seperti yang Anda lihat, dalam tag skrip dengan tipe atribut = application/ld+json, ada beberapa titik data yang semuanya disimpan dalam format JSON. Juga, Anda dapat melihat bahwa kami menggunakan pemeriksaan i==0, dan i==1. Ini karena ada dua tag skrip (dengan atribut yang sama) seperti ini di halaman. Tag pertama memberi kita beberapa poin data, sedangkan yang kedua memberikan sisanya. Setelah kami mengekstrak semua titik data, Anda dapat menyimpannya dalam file JSON dan menyimpannya seperti yang kami miliki. Anda juga dapat menyimpan, mengunggahnya ke situs, atau bahkan membuka API dengan data jika Anda mau.

impor json
impor ssl
dari urllib.request Permintaan impor, urlopen
dari bs4 impor BeautifulSoup

# Abaikan kesalahan Sertifikat SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Salah
ctx.verify_mode = ssl.CERT_NONE

# Ambil URL daftar Zillow sebagai masukan
url = input('Masukkan Url Cantuman Rumah Zillow- ')

# Buat situs web percaya bahwa Anda menggunakan browser
req = Permintaan(url, header={'User-Agent': 'Mozilla/5.0'})
halaman web = urlopen(req).read()

# Halaman HTML -> Sup objek BeautifulSoup = BeautifulSoup(halaman web, 'html.parser')
html = sup.prettify('utf-8')
property_details = {'details_long': {}, 'address': {}}

# Ekstrak titik data yang berbeda dari daftar properti
untuk judul di soup.findAll('title'):
property_details['Judul'] = title.text.strip()
merusak

untuk meta di soup.findAll('meta', attrs={'name': 'description'}):
property_details['details_short'] = meta['content'].strip()

untuk div di soup.findAll('div', attrs={'class': 'character-count-truncated'}):
property_details['details_long']['Deskripsi'] = div.text.strip()

untuk (i, skrip) di enumerate(soup.findAll('script',
attrs={'type': 'application/ld+json'})):
jika saya == 0:
json_data = json.loads(script.text)
property_details['details_long']['no_of_rooms'] = json_data['numberOfRooms']
property_details['details_long']['floor_size_in_sqrft'] = json_data['floorSize']['value']
property_details['address']['street'] = json_data['address']['streetAddress']
property_details['address']['locality'] = json_data['address']['addressLocality']
property_details['address']['region'] = json_data['address']['addressRegion']
property_details['address']['postal_code'] = json_data['address']['postalCode']
jika saya == 1:
json_data = json.loads(script.text)
property_details['price_in_dollars'] = json_data['offers']['price']
property_details['inage'] = json_data['image']
merusak

dengan open('house_listing_data.json', 'w') sebagai outfile:
json.dump(property_details, outfile, indent=4)

dengan open('house_listing_data.html', 'wb') sebagai file:
file.tulis(html)

print('———- Ekstraksi data selesai. Periksa file json.———-')

Output JSON akan terlihat seperti ini-

{
“detail_long”: {
“no_of_rooms”: 3,
“floor_size_in_sqrft”: “1.392”
},
"alamat": {
“jalan”: “22516 Joan Dr”,
"lokalitas": "California",
"wilayah": "MD",
“kode_pos”: “20619”
},
“Judul”: “22516 Joan Dr, California, MD 20619 | MLS #MDSM167670”,
“details_short”: “22516 Joan Dr , California, MD 20619-3175 adalah rumah keluarga tunggal yang terdaftar untuk dijual seharga $150.000. Rumah seluas 1.392 kaki persegi adalah properti dengan 3 tempat tidur, 2,0 kamar mandi. Temukan 40 foto rumah 22516 Joan Dr di Zillow. Lihat lebih banyak detail properti, riwayat penjualan, dan data Zestimate di Zillow. MLS#MDSM167670”,
“price_in_dollars”: 150000,
“inage”: “https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg”
}

Kesimpulan:

Menggunakan BeautifulSoup untuk kebutuhan pengikisan web Anda dapat menjadi mudah selama Anda dapat menganalisis halaman HTML secara manual terlebih dahulu dan memutuskan tag yang perlu ditargetkan. Ini dapat bekerja pada halaman yang tidak memiliki konten dinamis dan tidak berada di belakang halaman login. Untuk halaman web yang lebih kompleks, Anda memerlukan alat yang lebih kompleks. Tim kami di PromptCloud membantu perusahaan yang ingin memanfaatkan data dan membuat keputusan yang didukung data. Kami tidak hanya membantu menyiapkan mesin pengikis web otomatis yang berjalan pada interval yang sering, di cloud, tetapi juga membantu perusahaan menganalisis data untuk mengekstrak tren dan informasi berguna lainnya.