Merhaba herkese iyi forumlar. Benim sorum şu şekilde threading veya multiprocessing kullanarak bir websitesindeki her bir kategoriyi aynı anda dolaşıp veri çekebilmek mümkün mü? Eğer mümkünse nasıl yapılabilir bu konu hakkında görüşlerinizi benimle paylaşırsanız çok sevinirim.
https://python-istihza.yazbel.com/standart_moduller/threading.html
Threading için burayı araştırabilirsin. Web sitesinin içeriğini çekmek için requests, içeriği ayıklamak içinse beautifulsoup veya re modüllerini kullanarak yapabilirsin
Mümkün.
Kategorilerin sadece birinden veri çekebiliyor musunuz şu anda?
Şöyle diyeyim elimde kategori linkleri mevcut ve ben bu linkleri veri çekme fonksiyonuna for döngüsüyle tek tek gönderiyorum. Bütün kategorilerden veri çekebiliyorum ama sırasıyla bunu aynı anda yaptırmak istiyorum.
Threading modülünü kullanmayı öğrenirseniz bunu kolayca yapabilirsiniz. Benzer bir problem daha önce forumda da çözülmüştü, onu da inceleyebilirsiniz:
Biraz geç oldu ama cevap olarak attığınız konuya yeni bakabildim istediğim şeyi yaptım fakat şöyle bir sorun oluştu thread sayısını 2 yapsam bile verileri çekerken hata alıyorum. Bunu bir çok kez denedim ve çektiğim ürünlerin toplam sayısı hiçbir zaman birbirini tutmadı acaba sorun ne olabilir.
Kodu yanlis yazmis olabilirsin.
Hata ne peki? Kodunuzu da atın istiyorasanız.
import requests
from bs4 import BeautifulSoup
import threading
import datetime
products = []
links = [
"https://www.vatanbilgisayar.com/islemciler/?stk=true",
"https://www.vatanbilgisayar.com/hard-disk/?stk=true",
"https://www.vatanbilgisayar.com/sogutma-sistemleri/?stk=true",
"https://www.vatanbilgisayar.com/klavyeler/?stk=true",
"https://www.vatanbilgisayar.com/bilgisayar-kasasi/?stk=true",
"https://www.vatanbilgisayar.com/ekran-kartlari/?stk=true",
"https://www.vatanbilgisayar.com/harici-diskler/?stk=true",
"https://www.vatanbilgisayar.com/solid-state-disk/?stk=true",
"https://www.vatanbilgisayar.com/bilgisayar-mouse/?stk=true",
"https://www.vatanbilgisayar.com/anakart/?stk=true",
"https://www.vatanbilgisayar.com/bilgisayar-ram-bellek/?stk=true",
"https://www.vatanbilgisayar.com/bilgisayar-monitorleri/?stk=true",
"https://www.vatanbilgisayar.com/usb-bellek/?stk=true",
"https://www.vatanbilgisayar.com/guc-kaynaklari-power/?stk=true",
"https://www.vatanbilgisayar.com/bluetooth-kulaklik-mikrofon/?stk=true",
"https://www.vatanbilgisayar.com/oyuncu-koltuklari/?stk=true",
"https://www.vatanbilgisayar.com/mouse-pad/?stk=true",
"https://www.vatanbilgisayar.com/notebook/?stk=true"
]
baslangic = datetime.datetime.now()
i = 0
threads = 10
number = 0
def vatan(b):
global threads,number
page = 1
controller = 2
while page <= controller:
link = f"{b}&page={page}"
response = requests.get(link)
response = response.content
soup = BeautifulSoup(response,"html.parser")
productCategory = soup.find("p",{"class":"wrapper-detailpage-header__text"}).strong.span.text
controller = (int(soup.find("p",{"class":"wrapper-detailpage-header__text"}).strong.span.next_sibling.next_sibling.text) / 24 ) + 0.99
#toplam ürün sayısını 24'e yani her bir sayfadaki ürün sayısına bölüp kaç sayfa ilerleyeceğimi buluyorum
productList = soup.find("div",{"class":"wrapper-product wrapper-product--list-page clearfix"}).find_all("div",{"class":"product-list product-list--list-page"})
for product in productList:
productName = (product.find("div",{"class":"product-list__product-name"}).text).strip()
productPrice = product.find("span",{"class":"product-list__price"}).text
productLink = product.find("a",{"class":"product-list__image-safe-link sld"}).get("href")
productLink = f"https://www.vatanbilgisayar.com{productLink}"
productImage = product.find("a",{"class":"product-list__image-safe-link sld"}).div.img.get("data-src")
producTpl = (
productName,
productPrice,
productLink,
productImage,
productCategory,
10,
)
if producTpl in products:
pass
else:
products.append(producTpl)
number += 1
print(number,productName,productPrice,"VATAN")
page += 1
page = 1
threads -= 1
def threadings():
global i
global threads
while i < len(links):
if threads < 20:
site = links[i]
t = threading.Thread(target=vatan, args=(site,))
t.start()
i += 1
threads += 1
threadings()
bitis = datetime.datetime.now()
print(bitis - baslangic)
Kod bu şekilde ayrıca datetime ile programın ne kadar sürdüğüne bakmak istiyorum. Hiçbir şekilde çıktı alamıyorum.