beucismis / limoon

Web scraper base Pythonic API for Ekşi Sözlük
MIT License
7 stars 1 forks source link

Başlıktaki tüm girdilerin çekimi #1

Closed maidis closed 4 months ago

maidis commented 4 months ago

https://eksisozluk.com/1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058 başlığında geçen bir iddia vardı, başlığa en çok girişin pazar günleri yapıldığına dair.

Bunun doğruluğunu görmek için basit bir araştırma yapmak istedim. Bunun için de ilk başta tüm girdilerin tarih bilgisini çekmek gerekiyor. Bu da en kolay API yardımıyla olacağı için GitHub'da güncel bir şeyler bakınırken sizin projenize ve selenium-eksisozluk'e denk geldim.

Oldukça temiz, kolay ve ayrıca belgelendirilmiş bir kullanımı olduğu için limoon ile başladım ama bir başlıktaki sadece 10 girdi çekiliyor.

import limoon

topic = limoon.get_topic("1-evlenmeyin 2-evlenmeyin 3-evlenmeyin")

for x in topic.entrys:
  print(x.created)
30.03.2021 09:52
30.03.2021 09:53
30.03.2021 09:53
30.03.2021 09:54
30.03.2021 09:54
30.03.2021 09:55
30.03.2021 09:56
30.03.2021 09:58
30.03.2021 09:58
30.03.2021 09:59

Başlıktaki tüm girdileri doğrudan çekmek veya başlığın kaç sayfa olduğu bilgisine yönelik de bir fonksiyon sunarak kullanıcının tüm bu sayfalardan kendi oluşturacağı bir döngüyle çekim yapabilmesini sağlamak çok işe yarar olacaktır.

Proje için teşekkürler. Şimdilik kod desteği veremiyorum. İyi çalışmalar.

Sonradan gelen not: Aşağıdaki gibi bir kullanım mümkünmüş, kaydı geçersiz olarak kapatabilirsiniz veya yine de tek seferde girdilerin çekilmesi için kaydı açık bırakabilirsiniz ya da belgelendirmeye böyle bir kullanım olabileceği bilgisini ekleyebilirsiniz.

import limoon

topic = limoon.get_topic("1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058")

for x in range(1, topic.page_count + 1):
  topic = limoon.get_topic("1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058?p=" + str(x))
  for y in topic.entrys:
    print(y.created)

Daha sonradan gelen not: Merak edebilecekler ve benim gibi sürekli Python kullanmayanlara örnek olması için:

import limoon
import datetime

from collections import Counter

topic = limoon.get_topic("1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058")

gunler = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

gun_sayilari = Counter()

for x in range(1, topic.page_count + 1):
  topic = limoon.get_topic("1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058?p=" + str(x))
  for y in topic.entrys:
    dt = y.created
    dt = dt[0:10]
    day, month, year = (int(x) for x in dt.split('.'))
    ans = datetime.date(year, month, day)
    gun_sayilari[ans.strftime("%A")] += 1

for gun in gunler:
  print(f"{gun}: {gun_sayilari[gun]}")
Monday: 637
Tuesday: 625
Wednesday: 364
Thursday: 352
Friday: 345
Saturday: 933
Sunday: 1126
beucismis commented 4 months ago

Hahaha, merhaba! Yazınızı büyük zevkle okudum.

Başlıktaki tüm girdileri doğrudan çekmek veya başlığın kaç sayfa olduğu bilgisine yönelik de bir fonksiyon sunarak kullanıcının tüm bu sayfalardan kendi oluşturacağı bir döngüyle çekim yapabilmesini sağlamak çok işe yarar olacaktır.

Fonsiyon var ama fonksiyonda sayfa ile ilgili bir argüman henüz eklemedim. Yakın zamanda ekleyeceğim. Şu şekilde bir kullanımı olacak:

topic = limoon.get_topic("1-evlenmeyin-2-evlenmeyin-3-evlenmeyin--6870058", page=42)

Ayrıca, entry.created ve entry.edited metodlarının direkt datetime objesi olarak dönmesi içinde çalışacağım.

Yazdığınız kod şahane bu arada. Bu issues'i özelliği ekledikten sonra kapatacağım. İlginiz için teşekkür ederim.

beucismis commented 4 months ago

PR: 6a02febe052e1d2c89dcb77d670c37c941212fff