Scrapping Tor: python keyword input file, output file

From OnnoWiki
Jump to navigation Jump to search

Berikut adalah panduan langkah demi langkah untuk melakukan web scraping melalui jaringan Tor di Kali Linux 2024.4, dengan kata kunci yang diambil dari file dan hasil yang disimpan ke dalam file.

Persiapan:

1. Instalasi Tor dan Dependensi:

  • Perbarui sistem Anda:
sudo apt update && sudo apt upgrade
  • Instal Tor dan pustaka Python yang diperlukan:
sudo apt install tor python3-pip
pip3 install requests[socks] beautifulsoup4 stem pandas

2. Konfigurasi Tor:

  • Edit file konfigurasi Tor:
sudo nano /etc/tor/torrc
  • Tambahkan baris berikut untuk mengaktifkan port kontrol dan otentikasi cookie:
ControlPort 9051
CookieAuthentication 1
  • Simpan perubahan dan mulai layanan Tor:
sudo systemctl start tor
sudo systemctl enable tor

3. Persiapan File Kata Kunci: Buat file teks bernama `keywords.txt` yang berisi daftar kata kunci, satu per baris. Contoh:

berita teknologi
tutorial python
keamanan siber

Implementasi Kode Python:

Berikut adalah skrip Python yang membaca kata kunci dari `keywords.txt`, melakukan pencarian web melalui Tor, dan menyimpan hasilnya ke dalam file CSV:

import os
import time
import requests
from bs4 import BeautifulSoup
from stem import Signal
from stem.control import Controller
import pandas as pd

# Fungsi untuk memuat kata kunci dari file
def load_keywords(filename):
    with open(filename, 'r', encoding='utf-8') as f:
        return [line.strip() for line in f if line.strip()]

# Fungsi untuk memperbarui identitas Tor (IP baru)
def renew_tor_ip():
    with Controller.from_port(port=9051) as controller:
        controller.authenticate()
        controller.signal(Signal.NEWNYM)

# Fungsi untuk membuat sesi dengan proxy Tor
def get_tor_session():
    session = requests.Session()
    session.proxies = {
        'http': 'socks5h://127.0.0.1:9050',
        'https': 'socks5h://127.0.0.1:9050'
    }
    return session

# Fungsi untuk melakukan pencarian web dan mengembalikan URL hasil
def search_web(keyword, num_results=5):
    session = get_tor_session()
    query = '+'.join(keyword.split())
    url = f"https://www.google.com/search?q={query}"
    response = session.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    results = []
    for item in soup.find_all('h3'):
        parent = item.find_parent('a')
        if parent and parent['href'].startswith('/url?q='):
            link = parent['href'].split('/url?q=')[1].split('&')[0]
            results.append(link)
        if len(results) >= num_results:
            break
    return results

# Fungsi untuk mengunjungi URL dan mengambil konten
def scrape_content(url):
    session = get_tor_session()
    response = session.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    title = soup.title.string if soup.title else 'No Title'
    paragraphs = soup.find_all('p')
    content = ' '.join([p.get_text() for p in paragraphs[:5]])
    return title, content
 
# Fungsi utama untuk proses scraping
def main():
    keywords = load_keywords('keywords.txt')
    all_results = []

    for keyword in keywords:
        print(f"Mencari: {keyword}")
        renew_tor_ip()
        time.sleep(10)  # Tunggu agar IP baru aktif
        urls = search_web(keyword)
        for rank, url in enumerate(urls, start=1):
            print(f"  Mengambil: {url}")
            try:
                title, content = scrape_content(url)
                all_results.append({
                    'Keyword': keyword,
                    'Rank': rank,
                    'Title': title,
                    'URL': url,
                    'Content': content
                })
            except Exception as e:
                print(f"    Gagal mengambil konten dari {url}: {e}")
            time.sleep(5)  # Delay antara permintaan

    # Simpan hasil ke file CSV
    df = pd.DataFrame(all_results)
    df.to_csv('scraping_results.csv', index=False, encoding='utf-8')
    print("Hasil disimpan dalam 'scraping_results.csv'.")

if __name__ == '__main__':
    main()

Penjelasan Kode:

  • load_keywords: Membaca kata kunci dari file `keywords.txt`.
  • renew_tor_ip: Memperbarui identitas (IP) Tor untuk menghindari pemblokiran.
  • get_tor_session: Membuat sesi HTTP yang melewati proxy Tor.
  • search_web: Melakukan pencarian Google untuk kata kunci tertentu dan mengembalikan daftar URL hasil.
  • scrape_content: Mengunjungi URL dan mengambil judul serta lima paragraf pertama dari konten.
  • main: Mengatur alur kerja: membaca kata kunci, memperbarui IP Tor, melakukan pencarian, mengambil konten, dan menyimpan hasil ke file CSV.

Catatan Penting:

  • Etika dan Legalitas: Pastikan Anda memiliki izin untuk mengakses dan mengambil data dari situs web yang Anda targetkan. Selalu patuhi hukum dan regulasi yang berlaku terkait web scraping.
  • Kinerja dan Keandalan: Menggunakan Tor dapat memperlambat proses karena latensi jaringan. Selain itu, beberapa situs mungkin memblokir lalu lintas dari node keluar Tor. Pertimbangkan untuk menggunakan proxy berbayar jika memerlukan kinerja dan keandalan yang lebih baik.
  • Penanganan CAPTCHA: Beberapa situs mungkin menampilkan CAPTCHA saat mendeteksi


Pranala Menarik