Beranda BlogPengikisan web Cara mengikis data web menggunakan Permintaan dan BeautifulSoup

Cara mengikis data web menggunakan Permintaan dan BeautifulSoup

oleh Kadek

TL;DR: Menggunakan Permintaan dan BeautifulSoup untuk pengikisan web

Pertama, instal kedua dependensi dari terminal Anda menggunakan perintah berikut:

pip install requests beautifulsoup4

Setelah instalasi selesai, impor requests Dan BeautifulSoup ke file Anda:

import requests
from bs4 import BeautifulSoup
 

Kirim get() Permintaan dengan permintaan untuk mengunduh konten HTML laman landas Anda dan menyimpannya ke variabel - untuk contoh ini kami akan mengirimkannya get() Minta ke BooksToScrape dan simpan HTML dalam satu response Variabel:


response = requests.get(“https://books.toscrape.com/catalogue/page-1.html”)

Untuk mengekstrak titik data tertentu dari HTML, kita perlu mengurai responsnya menggunakan BS4:

soup = BeautifulSoup(response.content, "lxml")

Terakhir, kita dapat memilih elemen menggunakan pemilih CSS atau tag HTML seperti ini:


title = soup.find(“h1”)
print(title)

Internet menawarkan sejumlah besar data dan merupakan sumber daya berharga untuk bidang penelitian atau kepentingan pribadi apa pun. Namun, tidak semua informasi ini dapat diakses dengan mudah melalui cara tradisional.

Beberapa situs web tidak menyediakan API untuk mengambil kontennya; yang lain mungkin menggunakan teknologi kompleks yang menyulitkan ekstraksi data menggunakan metode tradisional.

Untuk memulainya, dalam tutorial ini kami akan menunjukkan cara mengekstrak data dari situs web mana pun menggunakan paket Python Requests dan BeautifulSoup. Ini mencakup dasar-dasar web scraping, termasuk mengirim permintaan HTTP, mengurai HTML, dan mengekstrak informasi spesifik.

Agar lebih praktis, mari pelajari cara membuat scraper untuk mengumpulkan daftar artikel teknis dari Techcrunch. Pada akhirnya, Anda akan mempelajari cara:

  • Unduh situs web
  • Parsing konten HTML
  • Ekstrak data menggunakan metode BeautifulSoup dan pemilih CSS

persyaratan

Untuk mengikuti tutorial ini Anda perlu menginstal ular piton 3.7 atau lebih tinggi di komputer Anda. Anda dapat mendownloadnya dari situs resminya jika Anda belum menginstalnya.

Anda juga memerlukan persyaratan berikut:

Menginstal lingkungan virtual

Sebelum menginstal perpustakaan yang diperlukan, disarankan untuk membuat lingkungan virtual untuk mengisolasi dependensi proyek.

Membuat lingkungan virtual di Windows

Buka prompt perintah dengan hak administratif dan jalankan perintah berikut untuk membuat lingkungan virtual baru bernama Venv:

Aktifkan lingkungan virtual dengan perintah berikut:

Membuat lingkungan virtual di macOS/Linux

Buka terminal dan jalankan perintah berikut untuk membuat lingkungan virtual baru bernama Venv:

	sudo python3 -m venv venv

Aktifkan lingkungan virtual:

Menginstal Permintaan, BeautifulSoup dan Lxml

Setelah Anda membuat dan mengaktifkan lingkungan virtual, Anda dapat menginstal perpustakaan yang diperlukan dengan menjalankan perintah berikut di terminal Anda:

	pip install requests beautifulsoup4 lxml

  • Permintaan adalah pustaka HTTP untuk Python yang menyederhanakan pengiriman permintaan HTTP dan pemrosesan respons.
  • BeautifulSoup adalah perpustakaan untuk mengurai dokumen HTML dan XML.
  • Lxml adalah parser XML dan HTML yang kuat dan cepat yang ditulis dalam C. Lxml digunakan oleh BeautifulSoup untuk menyediakan dukungan XPath.

Unduh halaman web pertanyaan

Langkah pertama dalam melakukan scraping data web adalah mendownload halaman web yang ingin Anda scrap. Anda dapat melakukan ini menggunakan get() Meminta metode perpustakaan.

	import requests

	url = 'https://techcrunch.com/category/startups/'
	response = requests.get(url)
	print(response.text)

Di atas kami menggunakan Permintaan untuk mendapatkan respons HTML dari TechCrunch. get() Ada satu metode response Objek yang berisi HTML halaman web. Kami menggunakan BeautifulSoup untuk mengekstrak data yang kami perlukan dari respons HTML ini.

Parsing respons HTML menggunakan BeautifulSoup

Setelah Anda mengunduh halaman web, Anda perlu mengurai HTML. Anda dapat melakukan ini menggunakan perpustakaan BeautifulSoup:

	from bs4 import BeautifulSoup

	soup = BeautifulSoup(response.text, 'lxml)

Konstruktor BeautifulSoup mengambil dua argumen:

  • HTML yang akan diurai
  • Pengurai yang akan digunakan

Dalam hal ini kami menggunakan lxml Parser, lalu kita meneruskan respons HTML ke BeautifulSoup dan membuat sebuah instance bernama soup.

Navigasikan jawabannya menggunakan BeautifulSoup

Saat halaman HTML diinisialisasi dalam instance BeautifulSoup, BS4 mengubah dokumen HTML menjadi pohon objek Python yang kompleks dan kemudian menyediakan beberapa cara untuk menanyakan pohon DOM ini:

  • Atribut objek Python: Setiap objek BeautifulSoup memiliki sekumpulan atribut yang dapat digunakan untuk mengakses objek anak, induk, dan saudaranya. Misalnya saja ini Anak-anak Atribut mengembalikan daftar anak objek, dan induk Atribut mengembalikan induk objek.
  • Metode Sup yang Indah (misalnya .find() Dan .find_all() ): Ini dapat digunakan untuk mencari elemen di pohon DOM yang cocok dengan kriteria tertentu. .find() Metode mengembalikan elemen pertama yang cocok sementara .find_all() Metode mengembalikan daftar semua elemen yang cocok.
  • Pemilih CSS (misalnya .select() Dan .select_one()): Pemilih CSS memungkinkan Anda memilih elemen berdasarkan kelas, ID, dan atribut lainnya.

Tapi tag mana yang harus Anda cari?

Anda dapat mengetahuinya dengan menggunakan opsi centang di browser Anda. Buka website Techcrunch, cari item yang ingin dikikis, klik kanan dan pilih “Memeriksa„.

Temukan elemen "periksa".Temukan elemen "periksa".

Ini akan membuka dokumen HTML pada item yang Anda pilih.

Buka elemen HTML di halamanBuka elemen HTML di halaman

Sekarang Anda perlu menemukan kombinasi tag dan kelas elemen HTML yang secara unik mengidentifikasi elemen yang Anda perlukan.

Misalnya, jika Anda ingin mengikis judul artikel di beranda TechCrunch, Anda akan memeriksa HTML dan melihat bahwa semua judul disertakan. h2 Tag dengan kelas post-block__title.

Memilih tag H2 dengan kelas pemilihMemilih tag H2 dengan kelas pemilih

Jadi Anda bisa menggunakan pemilih CSS berikut untuk memilih judul:

	soup.select('h2.post-block__title')

Ini memberikan daftar semuanya h2 Tag dengan kelas post-block__title pada halaman judul artikel.

Dapatkan elemen dengan tag HTML

sintaksis: element_name

Anda dapat menggunakan... find() Dan find_all() Metode untuk menemukan elemen berdasarkan tag HTML-nya.

Misalnya, kode berikut menemukan semuanya header Tag di halaman:

	header_tags = soup.find_all('header')
	for header_tag in header_tags:
		print(header_tag.get_text(strip=True))

Output di konsol akan terlihat seperti ini:

semua header di output konsol semua header di output konsol

Dapatkan elemen berdasarkan kelas CSS

sintaksis: .class_name

Pemilih kelas mengurutkan elemen berdasarkan isinya class Atribut.

	title = soup.select('.post-block__title__link')(0).text
	print(title)

Titik (.) sebelum nama kelas memberitahu BS4 bahwa itu adalah kelas CSS.

Ambil elemen berdasarkan ID

sintaksis: #id_value

Pemilih ID mencocokkan elemen berdasarkan nilai elemen. id Atribut. Agar elemen dapat dipilih, elemen tersebut harus dipilih id Atribut harus sama persis dengan nilai yang ditentukan dalam pemilih.

	element_by_id = soup.select('#element_id')  # returns the element at "element_id"
	print(element_by_id)

Simbol hash di depan nama ID memberitahu BS4 bahwa kita sedang mencari a id.

Mengambil elemen melalui penyeleksi atribut

sintaksis: (attribute=attribute_value) atau (attribute)

Pemilih atribut mencocokkan elemen berdasarkan keberadaan atau nilai atribut tertentu. Satu-satunya perbedaan adalah pemilih ini menggunakan tanda kurung siku () dan bukan titik (.). class atau simbol hash (#) sebagai id.

	# Get the URL of the article
	url = soup.select('.post-block__title__link')(0)('href')
	print(url)

keluaran:

Mengambil item menggunakan XPath

XPath menggunakan sintaks seperti jalur untuk menemukan elemen dalam dokumen XML atau HTML. Ia bekerja seperti sistem file tradisional.

Untuk menemukan XPath untuk elemen tertentu pada halaman:

  • Klik kanan elemen pada halaman dan klik “Memeriksa" untuk membuka tab Alat Pengembang.
Periksa Elemen HTML Periksa Elemen HTML
  • Pilih item pada tab Item.
Pilih elemen judul dari HTMLPilih elemen judul dari HTML
  • Klik "Menyalin“ -> „Salin XPath„.
Salin elemen dalam pemilih HTMLSalin elemen dalam pemilih HTML

catatan: Jika XPath tidak memberikan hasil yang diinginkan, salin XPath lengkap, bukan hanya jalurnya. Langkah-langkah selanjutnya sama.

Sekarang kita dapat menjalankan kode berikut untuk mengekstrak artikel pertama di halaman tersebut XPath:

	from bs4 import BeautifulSoup
	import requests
	from lxml import etree
	
	url = 'https://techcrunch.com/category/startups/'
	headers = {
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
		"Accept-Language": "en-US, en;q=0.5",
	}
	
	response = requests.get(url, headers=headers)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
		dom = etree.HTML(str(soup))
		print(dom.xpath('//*(@id="tc-main-content")/div/div(2)/div/article(1)/header/h2/a')(0).text)

Inilah hasilnya:

	New geospatial data startup streamlines satellite imagery visualization

Permintaan dan contoh pengikisan BeautifulSoup

Mari gabungkan semua ini untuk mencari TechCrunch untuk daftar artikel startup:

	import requests
	from bs4 import BeautifulSoup
	
	url = 'https://techcrunch.com/category/startups/'
	
	
	
	article_list = ()
	
	response = requests.get(url)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
	
		articles = soup.find_all('header')
	
		for article in articles:
			title = article.get_text(strip=True)
			url = article.find('a')('href')
			print(title)
			print(url)

Kode ini mencetak judul dan URL setiap artikel startup.

Simpan data dalam file CSV

Setelah Anda mengekstrak data yang diinginkan dari halaman web, Anda dapat menyimpannya ke file CSV untuk analisis lebih lanjut. Untuk melakukan ini, gunakan csv Modul, tambahkan kode ini ke scraper Anda:

	import requests
	from bs4 import BeautifulSoup
	import csv
	
	url = 'https://techcrunch.com/category/startups/'
	
	
	
	article_list = ()
	
	response = requests.get(url)
	if response.status_code == 200:
		soup = BeautifulSoup(response.content, "lxml")
	
		articles = soup.find_all('header')
	
		for article in articles:
			title = article.get_text(strip=True)
			url = article.find('a')('href')
			article_list.append((title, url))
	
	with open('startup_articles.csv', 'w', newline='') as f:
		csvwriter = csv.writer(f)
		csvwriter.writerow(('Title', 'URL'))
		for article in article_list:
			csvwriter.writerow(article)
	

Ini akan membuat file CSV bernama startup_artikel.csv dan tulis judul dan URL artikel ke file tersebut. Anda kemudian dapat melihat file CSV dalam program spreadsheet seperti Microsoft Excel atau Google Spreadsheet untuk analisis lebih lanjut.

Terus belajar

Selamat, Anda baru saja membuat situs web pertama Anda dengan Permintaan dan BeautifulSoup!

Ingin mempelajari lebih lanjut tentang web scraping? Kunjungi pusat pengikisan kami. Di sana Anda akan menemukan semua yang Anda butuhkan untuk menjadi seorang ahli.

Jika Anda siap menangani proyek nyata, ikuti tutorial lanjutan kami:

Teruslah menjelajah dan selamat menggores!

Pos terkait

Tinggalkan Komentar