Menggunakan Python untuk SEO: Scraping Data SEO dengan Requests dan BeautifulSoup

Pinterest LinkedIn Tumblr +

Jika kamu ingin melakukan analisis SEO secara otomatis, Python bisa menjadi alat yang sangat powerful. Salah satu cara yang bisa dilakukan adalah dengan mengambil data dari halaman web yang relevan dengan SEO, seperti title, meta description, meta keywords, dan elemen penting lainnya. Dalam artikel ini, kita akan membahas bagaimana cara menggunakan Python untuk scraping SEO data dari beberapa situs web menggunakan beberapa library penting seperti requests, BeautifulSoup, dan csv.

Dengan contoh kode yang akan dibahas, kita bisa mengambil data SEO secara otomatis dari banyak URL. Selain itu, penggunaan Python dalam SEO juga bisa mempermudah kamu mengidentifikasi konten yang perlu dioptimasi.

Apa itu Web Scraping?

Web scraping adalah proses otomatis untuk mengekstraksi data dari website. Dengan Python, kita bisa mengotomatisasi pengambilan informasi SEO dari halaman web seperti title, meta description, meta keywords, heading tags, dan lain-lain. Data yang diekstraksi bisa membantu kita memahami bagaimana optimasi SEO pada website-website tersebut.

Library yang Digunakan

  1. Requests: Digunakan untuk mengambil konten dari website.
  2. BeautifulSoup: Mempermudah proses parsing HTML untuk mengambil elemen-elemen tertentu dari halaman web.
  3. CSV: Digunakan untuk menyimpan hasil scraping ke file CSV.
  4. time dan random: Digunakan untuk memberikan jeda waktu antara setiap request untuk menghindari deteksi sebagai bot oleh website.

Langkah-Langkah Web Scraping SEO

Untuk memulai scraping, kita akan menggunakan beberapa pustaka Python populer. Ketikkan script berikut:

import requests
from bs4 import BeautifulSoup
import csv
import time
import random
from urllib.parse import urlparse, urljoin


Berikut penjelasan singkat mengenai pustaka yang digunakan:

  1. import requests:
    • Library ini digunakan untuk mengirim permintaan HTTP, seperti mengambil data dari halaman web. requests.get() akan mengunduh konten halaman yang kita inginkan.
  2. from bs4 import BeautifulSoup:
    • BeautifulSoup adalah pustaka yang digunakan untuk parsing dokumen HTML dan memudahkan ekstraksi data dari elemen tertentu, seperti tag <title>, <meta>, atau header (H1, H2, dll.).
  3. import csv:
    • CSV adalah format populer untuk menyimpan dan bertukar data. Dengan pustaka csv, kita bisa menyimpan hasil scraping dalam bentuk file CSV yang mudah diakses dan dianalisis.
  4. import time:
    • Digunakan untuk memberikan jeda atau waktu tunggu antar permintaan. Ini membantu agar permintaan ke server tidak terlalu cepat dan menghindari pembatasan seperti deteksi bot.
  5. import random:
    • Pustaka ini digunakan untuk menghasilkan angka acak, yang dalam konteks ini, digunakan untuk menentukan waktu jeda acak antara permintaan scraping, sehingga scraping terlihat lebih natural.
  6. from urllib.parse import urlparse, urljoin:
    • urlparse memisahkan URL menjadi bagian-bagian seperti skema (http/https), domain, path, dll. Ini berguna untuk menentukan apakah suatu link adalah link internal atau eksternal.
    • urljoin digunakan untuk menyusun URL penuh dari URL dasar dan URL relatif.
BACA JUGA  Mengenal Lebih Dalam Tugas dan Tantangan Seorang SEO Strategist

Langkah 1: Mengambil Konten Halaman Web

Hal pertama yang perlu kita lakukan adalah mengakses halaman web yang ingin kita scrape. Untuk keperluan ini, kita akan menggunakan library requests untuk mengirim permintaan HTTP ke situs web yang dituju dan mengambil kontennya.

def get_page_content(url):
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # Menghasilkan error jika status HTTP bukan 200
        return response.content
    except requests.exceptions.RequestException as e:
        print(f"Error saat mengakses {url}: {e}")
        return None


 

Di sini, requests.get() digunakan untuk mengambil konten dari URL yang diberikan. Kita juga menambahkan pengelolaan error dengan try-except untuk menangani kesalahan seperti timeout atau URL yang tidak valid. Jika respons yang diterima memiliki status selain 200 (OK), fungsi ini akan mengembalikan pesan error.

Langkah 2: Mengekstrak Data SEO

Setelah berhasil mengambil konten halaman web, langkah berikutnya adalah mengekstrak data SEO penting dari halaman tersebut. Dalam contoh ini, kita akan mengambil title, meta description, meta keywords, tag H1, tag H2, dan juga konten utama dari artikel.

def extract_seo_data(html_content, url):
    soup = BeautifulSoup(html_content, 'html.parser')
    
    title = soup.title.string if soup.title else 'N/A'
    
    meta_desc = ''
    meta_tag_desc = soup.find('meta', attrs={'name': 'description'})
    if meta_tag_desc and 'content' in meta_tag_desc.attrs:
        meta_desc = meta_tag_desc['content']
    
    meta_keywords = ''
    meta_tag_keywords = soup.find('meta', attrs={'name': 'keywords'})
    if meta_tag_keywords and 'content' in meta_tag_keywords.attrs:
        meta_keywords = meta_tag_keywords['content']

    h1_tags = [h1.get_text(strip=True) for h1 in soup.find_all('h1')]
    h2_tags = [h2.get_text(strip=True) for h2 in soup.find_all('h2')]

    main_content = ''
    article = soup.find('article')
    if article:
        main_content = ' '.join([p.get_text(strip=True) for p in article.find_all('p')])
    else:
        div_main = soup.find('div', {'class': 'main-content'})
        if div_main:
            main_content = ' '.join([p.get_text(strip=True) for p in div_main.find_all('p')])
        else:
            main_content = ' '.join([p.get_text(strip=True) for p in soup.find_all('p')])

    internal_links = []
    external_links = []
    domain = urlparse(url).netloc

    for a_tag in soup.find_all('a', href=True):
        href = a_tag['href']
        parsed_href = urlparse(href)

        if not parsed_href.scheme:
            continue

        if parsed_href.netloc == domain or not parsed_href.netloc:
            full_url = urljoin(url, href)
            internal_links.append(full_url)
        else:
            external_links.append(href)

    return {
        'URL': url,
        'Title': title,
        'Meta Description': meta_desc,
        'Meta Keywords': meta_keywords,
        'H1 Tags': '; '.join(h1_tags),
        'H2 Tags': '; '.join(h2_tags),
        'Main Content': main_content[:500] + '...' if len(main_content) &gt; 500 else main_content,
        'Internal Links': '; '.join(internal_links),
        'External Links': '; '.join(external_links)
    }

Fungsi extract_seo_data() akan mengurai konten HTML dan mengekstrak berbagai elemen SEO seperti title, meta description, dan meta keywords menggunakan BeautifulSoup. Tag H1 dan H2 juga diambil, yang penting untuk struktur SEO. Konten utama dari halaman juga diekstrak, meskipun kita hanya menampilkan 500 karakter pertama untuk menjaga agar hasilnya tidak terlalu panjang.

BACA JUGA  Bisakah Python Digunakan untuk SEO? Yuk, Cari Tahu dan Mulai Belajar!

3. Melakukan Scraping SEO untuk Beberapa URL

Fungsi berikut digunakan untuk melakukan scraping SEO dari beberapa URL. Setiap URL akan diambil konten halamannya, kemudian diekstrak data SEO-nya menggunakan fungsi extract_seo_data.

def scrape_seo_data(urls):
    seo_data_list = []
    
    for url in urls:
        print(f"Scraping {url}...")
        html_content = get_page_content(url)
        
        if html_content:
            seo_data = extract_seo_data(html_content, url)
            seo_data_list.append(seo_data)
        else:
            print(f"Gagal scrape {url}")
        
        time.sleep(random.uniform(1, 3))  # Random delay untuk menghindari deteksi bot
    
    return seo_data_list


Dengan urlparse() dan urljoin(), kita bisa memeriksa apakah suatu link internal atau eksternal, lalu mengumpulkan link-link tersebut ke dalam dua daftar terpisah.

Langkah 4: Menyimpan Hasil Scraping ke File CSV

Setelah data SEO berhasil dikumpulkan, kita bisa menyimpannya ke dalam file CSV. Fungsi save_to_csv akan membuat file CSV dan menuliskan data SEO ke dalamnya.

def save_to_csv(data, filename):
    if data:  
        keys = data[0].keys()
        with open(filename, 'w', newline='', encoding='utf-8') as output_file:
            dict_writer = csv.DictWriter(output_file, fieldnames=keys)
            dict_writer.writeheader()
            dict_writer.writerows(data)
        print(f"Data berhasil disimpan ke {filename}")
    else:
        print("Tidak ada data untuk disimpan.")

Fungsi ini akan membuat file CSV yang berisi hasil scraping. Data yang sudah diekstrak akan disimpan dengan menggunakan csv.DictWriter(), sehingga setiap elemen dari data yang kita dapatkan bisa tersusun dengan rapi dalam format CSV.

5. Daftar URL yang Di-scrape

Berikut adalah beberapa contoh URL yang akan digunakan untuk scraping data SEO. URL-URL ini merupakan blog dari beberapa penyedia hosting dan layanan SEO di Indonesia.

urls = [
    'https://niagahoster.co.id/blog',
    'https://idcloudhost.com/blog',
    'https://jetorbit.com/blog',
    'https://sribu.com/id/blog',
    'https://dewaweb.com/blog',
    'https://seoakademi.id',
    'https://panduanim.com',
    'https://maxmanroe.com',
    'https://sekolahpintar.com',
]


6. Menjalankan Scraping dan Menyimpan Hasil

Untuk menjalankan scraping, kita tinggal memanggil fungsi scrape_seo_data dengan URL-URL yang sudah disiapkan, kemudian menyimpan hasilnya ke file CSV.

seo_data = scrape_seo_data(urls)
save_to_csv(seo_data, 'seo_data_multiple_websites_with_keywords_h2.csv')

Contoh Hasil Analisis Scraping SEO dengan Python

Dalam implementasi scraping SEO menggunakan Python, hasil yang didapat bisa sangat bermanfaat untuk memahami optimasi SEO suatu halaman web. Berikut adalah contoh hasil analisis dari scraping beberapa situs blog penyedia layanan hosting di Indonesia, yang berhasil mengumpulkan informasi seperti Title, Meta Description, Meta Keywords, H1 Tags, dan Internal & External Links.

BACA JUGA  Ngaco Banget! Mengungkap Kekeliruan Umum tentang Kamu yang 'Anak IT'

Misalnya, dari scraping sebuah blog hosting, hasil analisisnya seperti berikut:

  • URL:https://niagahoster.co.id/blog
  • Title: Panduan Hosting untuk Pemula
  • Meta Description: Temukan berbagai tips dan panduan tentang hosting, domain, dan pembuatan website untuk pemula.
  • Meta Keywords: hosting, domain, website pemula, tips hosting
  • H1 Tags: Panduan Lengkap Hosting
  • H2 Tags: Apa itu Hosting?; Cara Memilih Hosting Terbaik
  • Main Content (500 karakter pertama): Hosting adalah layanan untuk menyimpan data website agar dapat diakses di internet. Untuk membuat website, Anda memerlukan hosting yang tepat…
  • Internal Links: niagahoster.co.id/panduan-hosting
  • External Links: wikipedia.org/wiki/Hosting

Data seperti ini sangat berguna untuk menganalisis bagaimana website tersebut mengoptimalkan elemen-elemen penting SEO. Anda bisa melakukan hal yang sama dengan beberapa situs lainnya untuk menemukan pola dan kesempatan dalam optimasi konten.

Selain itu, Anda juga dapat mengevaluasi kinerja website Anda sendiri, apakah sudah mengoptimalkan title, meta description, atau penggunaan heading tags dengan baik. Scraping ini dapat mempermudah pekerjaan, terutama jika ingin menganalisis banyak situs sekaligus.

Kesimpulan

Dengan Python, scraping data SEO bisa dilakukan secara otomatis dan efisien. Kode yang dibahas di atas membantu kita mengumpulkan informasi SEO penting dari berbagai halaman web. Dengan informasi ini, kita bisa menganalisis bagaimana optimasi SEO dilakukan di situs lain, atau bahkan melihat peluang untuk meningkatkan SEO di situs kita sendiri.

Menggunakan Python untuk SEO tidak hanya bermanfaat bagi developer, tetapi juga bisa membantu praktisi SEO yang ingin melakukan analisis dalam skala besar. Cobalah praktikkan langkah-langkah di atas, dan lihat bagaimana Python bisa meningkatkan analisis SEO-mu!

Jika kamu tertarik untuk lebih mendalami Python dan penggunaannya dalam SEO, kamu bisa mempelajari lebih lanjut di kursus berikut:

Selamat belajar dan semoga sukses dalam mengoptimasi SEO dengan Python!

Share.

About Author

I am a Full-Stack Designer who loves to translate designs files into Website and Application, Based in Bandar Lampung - Indonesia

Comments are closed.