Scrapy kullanarak bir web sitesinden veri almak ve dosyaya kaydetmek istiyorum. Yalnız verilerin bulunduğu ilgili sayfaların linklerini ana sayfadan almam gerekiyor. Dolayısıyla öncelikle ana sayfayı tarayıp linkleri ayrıştırdıktan sonra (link sayısı her taramada değişiyor) bu linkleri birer birer taramam gerekiyor. Ana sayfayı tarıyorum, sorun yok. Linkleri ayrıştırıp bir dizi halinde alıyorum (farklı yapılarda da alabilirim) ancak bu linkleri taradığımda (örneğin 200 adet link var) sadece son linkten dönen veriyi kayıt edebiliyorum. Scrapy nin xpath yada css seçicileriyle işim yok çünkü ana sayfa javascript çalıştırıyor ve tarama sonrası bana json verisi döndürüyor. Linkleri bu json verisinden seçiyorum.
Bu linkleri birer birer taramam ve dönen değeri kaydetmem gerekiyor. Scrapy yapısına çok hakim olamadığım için (belgelere göz gezdirmeme rağmen) nasıl bir yol izleyeceğimi bilemiyorum. Yardımcı olabilecek kimse var mı acaba? Şimdiden teşekkürler…
Sorunumu çözdüm arkadaşlar. Aynı sorunla karşılaşanlar için kısaca açıklamam gerekirse:
Scrapy nin parse fonksiyonuna bir geri dönüş değeri atamam gerekti. Daha doğrusu başka bir fonksiyona işaret etmem gerekti diyebilirim. Kaydetmek istediğim verileri bu fonksiyon içinde işleme koydum.
Kısa bir örnek:
start_urls = ‘https //www siteadresi com/’# Ana Sayfa
def parse(self, response):
results = json.loads(response.body)
# Sayfa numaralarını barındıran anahtar adı (data)
for i in results['data']:
# Sayfa numarası (id)
page_num = i['id']
page = 'https://www.siteadresi.com/sayfa/'
# Veri almak istediğim sayfa (https://www.siteadresi.com/sayfa/123)
url = urljoin(response.url, (page + str(page_num)))
# Fonksiyon çağrısı (callback)
yield scrapy.Request(url, callback=self.parse_product)
def parse_product(self, response):
result = json.loads(response.body)
# Veri
val = result['value']# Veri
print("{}".format(val))
Şimdilik bu şekilde çözülmüş görünüyor. İstediğim verilerin tamamını alabiliyorum. Daha pratik yada daha sağlıklı bir çözüm öneriniz olur ise bildirirseniz sevinirim. Herkese iyi çalışmalar…