Python ile Web Scraper
Herkese merhaba, bugün sizlere kendi geliştirdiğim web scraper tool'unu göstereceğim. Son zamanlarda forumda, sitelerin kodlarını nasıl çekerim diye konular gördüm, bu yüzden böyle bir uygulama yapmaya karar verdim. Uygulama daha v1 sürümünde olduğu için çok gelişmiş özellikleri bulunmuyor. Ancak geliştirerek daha farklı özellikler ekleyeceğim.
Özellikler
Bu araç, kullanıcı dostu arayüzü ile bir web sayfasından kodları çekip, düzenlenmiş ve okunabilir bir formata dönüştürmenizi sağlıyor. URL'yi girdikten sonra, sayfanın HTML ve JavaScript kodları işleniyor, gereksiz boşluklar ve düzensizlikler temizleniyor. Ardından, bu güzelleştirilmiş sayfa kullanıcıya kaydedilebilecek bir dosya olarak sunuluyor. İlk sürüm olmasına rağmen, temel işlevlerini oldukça verimli bir şekilde yerine getiriyor ve kodla uğraşmak istemeyenler için ideal bir çözüm sunuyor.
Gelecek sürümlerde daha fazla özelleştirme seçenekleri ve farklı web sayfalarından daha detaylı veri çekme özellikleri eklemeyi planlıyorum. Şimdilik, temel işlevleriyle sizlere bir başlangıç aracı sunuyor.
Sonuç olarak, güzelleştirilmiş kodları bir dosya halinde kaydedip, istediğiniz zaman incelemeniz için hazır hale getiriyor.
web-scraper.py
Herkese merhaba, bugün sizlere kendi geliştirdiğim web scraper tool'unu göstereceğim. Son zamanlarda forumda, sitelerin kodlarını nasıl çekerim diye konular gördüm, bu yüzden böyle bir uygulama yapmaya karar verdim. Uygulama daha v1 sürümünde olduğu için çok gelişmiş özellikleri bulunmuyor. Ancak geliştirerek daha farklı özellikler ekleyeceğim.
Özellikler
Bu araç, kullanıcı dostu arayüzü ile bir web sayfasından kodları çekip, düzenlenmiş ve okunabilir bir formata dönüştürmenizi sağlıyor. URL'yi girdikten sonra, sayfanın HTML ve JavaScript kodları işleniyor, gereksiz boşluklar ve düzensizlikler temizleniyor. Ardından, bu güzelleştirilmiş sayfa kullanıcıya kaydedilebilecek bir dosya olarak sunuluyor. İlk sürüm olmasına rağmen, temel işlevlerini oldukça verimli bir şekilde yerine getiriyor ve kodla uğraşmak istemeyenler için ideal bir çözüm sunuyor.
Gelecek sürümlerde daha fazla özelleştirme seçenekleri ve farklı web sayfalarından daha detaylı veri çekme özellikleri eklemeyi planlıyorum. Şimdilik, temel işlevleriyle sizlere bir başlangıç aracı sunuyor.
Sonuç olarak, güzelleştirilmiş kodları bir dosya halinde kaydedip, istediğiniz zaman incelemeniz için hazır hale getiriyor.
web-scraper.py
Python:
from bs4 import BeautifulSoup
import jsbeautifier
import sys
import requests
from io import BytesIO
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QSpacerItem, QSizePolicy
from PyQt5.QtGui import QFont, QPixmap, QImage, QIcon
from PyQt5.QtCore import Qt
class WebPageBeautifier(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Web Scraper by CapoDeiCapi')
self.setGeometry(200, 200, 800, 600)
icon_url = 'https://i.hizliresim.com/9sLmPH.png'
self.setWindowIconFromUrl(icon_url)
mainLayout = QVBoxLayout()
logoLayout = QVBoxLayout()
inputLayout = QVBoxLayout()
logo_url = 'https://i.hizliresim.com/9sLmPH.png'
self.logoLabel = QLabel()
self.loadLogoFromUrl(logo_url)
self.logoLabel.setAlignment(Qt.AlignCenter)
logoLayout.addWidget(self.logoLabel)
font = QFont()
font.setPointSize(12)
self.urlLabel = QLabel('URL Giriniz:')
self.urlLabel.setFont(font)
self.urlInput = QLineEdit()
self.urlInput.setFont(font)
self.urlInput.setFixedHeight(40)
self.fileLabel = QLabel('Dosya Adı Giriniz:')
self.fileLabel.setFont(font)
self.fileInput = QLineEdit()
self.fileInput.setFont(font)
self.fileInput.setFixedHeight(40)
self.saveButton = QPushButton('Güzelleştir ve Kaydet')
self.saveButton.setFont(font)
self.saveButton.setFixedHeight(60)
self.saveButton.clicked.connect(self.beautifyAndSave)
spacer1 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
spacer2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
inputLayout.addWidget(self.urlLabel)
inputLayout.addWidget(self.urlInput)
inputLayout.addItem(spacer1)
inputLayout.addWidget(self.fileLabel)
inputLayout.addWidget(self.fileInput)
inputLayout.addItem(spacer2)
inputLayout.addWidget(self.saveButton)
mainLayout.addLayout(logoLayout)
mainLayout.addLayout(inputLayout)
self.setLayout(mainLayout)
def setWindowIconFromUrl(self, url):
try:
response = requests.get(url)
if response.status_code == 200:
image_data = BytesIO(response.content)
image = QImage()
image.loadFromData(image_data.read())
pixmap = QPixmap.fromImage(image)
self.setWindowIcon(QIcon(pixmap))
else:
QMessageBox.warning(self, 'Hata', 'İkon yüklenemedi.')
except Exception as e:
QMessageBox.critical(self, 'Hata', f'Bir hata oluştu: {str(e)}')
def loadLogoFromUrl(self, url):
try:
response = requests.get(url)
if response.status_code == 200:
image_data = BytesIO(response.content)
image = QImage()
image.loadFromData(image_data.read())
high_res_pixmap = QPixmap.fromImage(image)
scaled_pixmap = high_res_pixmap.scaled(400, 200, Qt.KeepAspectRatio, Qt.SmoothTransformation)
self.logoLabel.setPixmap(scaled_pixmap)
else:
QMessageBox.warning(self, 'Hata', 'Logo yüklenemedi.')
except Exception as e:
QMessageBox.critical(self, 'Hata', f'Bir hata oluştu: {str(e)}')
def beautifyAndSave(self):
url = self.urlInput.text()
file_name = self.fileInput.text()
if not url or not file_name:
QMessageBox.warning(self, 'Hata', 'Lütfen hem URL hem de dosya adı giriniz.')
return
if not url.startswith(('http://', 'https://')):
url = f'https://{url}'
try:
response = requests.get(url)
if response.status_code == 404:
QMessageBox.warning(self, 'Hata', f"Error {response.status_code}: Böyle bir sayfa yok")
return
elif response.status_code == 403:
QMessageBox.warning(self, 'Hata', f"Error {response.status_code}: Bu sayfaya erişim iznin yok")
return
body = response.text
soup = BeautifulSoup(body, 'html5lib')
beautifier = jsbeautifier.Beautifier()
for script in soup.find_all('script'):
original_js = script.string
if original_js:
beautified_js = beautifier.beautify(original_js)
script.string = beautified_js
prettified_html = soup.prettify()
with open(f"{file_name}.html", "w", encoding='utf-8') as file:
file.write(prettified_html)
QMessageBox.information(self, 'Başarılı', 'Sayfa başarıyla güzelleştirildi ve kaydedildi.')
except Exception as e:
QMessageBox.critical(self, 'Hata', f'Bir hata oluştu: {str(e)}')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = WebPageBeautifier()
window.show()
sys.exit(app.exec_())
Son düzenleme:


