Tekrarlanan iş için kısa yol

Arkadaşlar selam,

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
import datetime

# Sabitler
site = "Ambalajstore"
tarih = datetime.datetime.now()
dt_obj = datetime.datetime.strftime(tarih,'%d/%m/%Y')

# Çekilecek Veriler 
url = "https://www.ambalajstore.com/kategori/bardak-tabak?tp=2&siralama=fiyat:asc&stoktakiler=1"
response = requests.get(url)
html_icerigi = response.content
soup = BeautifulSoup(html_icerigi,"html.parser")
fiyat = soup.find_all("div",{"class":"showcase-price-new"})
isim =soup.find_all("div",{"class":"showcase-title"})

liste = list()

for i in range(len(isim)):
    isim[i] = (isim[i].text).strip("\n")
    a = fiyat[i].text.split("+")
    fiyat[i] = round(((float((a[0].strip().replace("\n","").replace("\t","").replace(",","."))))*1.18),2)
    liste.append([isim[i],fiyat[i]])

df = pd.DataFrame(liste,columns = ["İsim","Fiyat"])
df.to_csv('fiyat.csv', encoding='utf-8', header=None, mode='a', index=False)

# Sabit veriler
for i in range(len(isim)):
    i=site
    i=dt_obj
    df2=df.assign(kaynak=site,
                  tarih=dt_obj)

df2.to_csv('fiyat.csv', encoding='utf-8', header=None, mode='a', index=False)
print("Birinci Sayfa Tamam")

Şeklinde yazmış olduğum kodlarım var. Gayet güzel sorunsuz çalışıyor ama sorun da burada başlıyor. Almak istediğim veri 17 sayfa yani yukarıdaki işlem 17 kez daha dönmeli ama dönerkende

url = "https://www.ambalajstore.com/kategori/bardak-tabak?tp=2&siralama=fiyat:asc&stoktakiler=1"

satırı 2-3-4 diye devam etmeli ki diğer sayfaları da alabilmek için. Bunu nasıl yapabilirim (Döngüyle olacağını biliyorum ama o dönüyü nasıl yapacağımı bilmiyorum :frowning: )

Denemedim ama şöyle bir şey kullanabilirsiniz:

for sira, site in enumerate([0,5, 3,6],1):
    #kodlar...

Seklinde url tanımlamasını f-string ile for döngüsü içine alabilirsiniz.

for a in range (1,18)
      url = "https://www.ambalajstore.com/kategori/bardak-tabak?tp="+a+"&siralama=fiyat:asc&stoktakiler=1"

sitede tek değişen tp=1,2 şeklinde sayfa numarası gibi görünüyor.

url yi bir for ile oluştrup sorguyu tekrarlarsanız sayfayı alabilirsiniz gibi görünüyor.

Tabi bu sadece 17 sayfa olduğunu bildiğiniz bir site için işe yarar.

Kaç sayfadan oluştuğu bilgisini işleyip daha da geliştirebilirsiniz

Kodu denemedim. Scoplara dikkat ederek kodunuzu bu for döngüsüne bağlarsanız düzgün çalışacağını düşünüyorum.

Teşekkür ederim. bu şekildeki döngülerle çözdüm sorunu.

for sira in range(1,son_sayfa):

şeklinde değişkene attım ve sayfanın altında pagination yaptığı bölümden son sayfa numarasını alıp koydum. Bu sayede kaç sayfa olursa olsun işlem gerçekleşiyor.

1 Beğeni