2012-06-20 12 views
5

Bir web sitesini tararım (yalnızca iki seviye derin) ve her iki düzeyde de sitelerden bilgi almak istiyorum. İçinde bulunduğum sorun, bir öğenin alanlarını her iki düzeydeki bilgilerle doldurmak istiyorum. Bunu nasıl yaparım?Scrapy CrawlSpider: öğenin farklı düzeylerde ayrıştırılmasıyla ilgili öğeye nasıl erişilir?

Tüm iş parçacıklarının erişebileceği bir örnek değişkeni olarak öğelerin bir listesini (örümceğin aynı örneği olduğu için) ve parse_1 bazı alanları dolduracağını düşünüyordum ve parse_2 bunu denetlemek zorunda kalacak. ilgili değeri doldurmadan önce doğru anahtarı. Bu yöntem külfetli gibi gözüküyor ve hala nasıl çalışacağından emin değilim.

Düşündüğüm şey daha iyi bir yol olmalı, belki bir şekilde bir öğeyi geri bildirime geçirmelisiniz. Bununla birlikte, Request() yöntemiyle bunu nasıl yapacağımı bilmiyorum. Fikirler? size daha sonra argümanları alabilmesi için ikinci geri aramasında, bu geri arama işlevlerine argümanlar geçerken ilginizi çekebilir Bazı durumlarda

: scrapy belgelerine

cevap

8

. Bunun için Request.meta özniteliğini kullanabilirsiniz. Yani, temelde bütün göndermek sonra ilk sayfayı kazımak ve öğenin tüm bilgileri saklamak ve

def parse_page1(self, response): 
    item = MyItem() 
    item['main_url'] = response.url 
    request = Request("http://www.example.com/some_page.html", 
         callback=self.parse_page2) 
    request.meta['item'] = item 
    return request 

def parse_page2(self, response): 
    item = response.meta['item'] 
    item['other_url'] = response.url 
    return item 

: Burada

farklı sayfalarından farklı alanları doldurmak için, bu mekanizmayı kullanarak bir öğe geçirmek nasıl bir örnek Bu ikinci seviye URL'si için istekte bulunan öğe ve tek bir öğede tüm bilgilere sahip.

+0

Bunu, bilgiyi URL'ye yapıştırarak yapardım. Bu şekilde, özellikle URL'lerde iyi kodlamayan öğeler için daha iyi görünüyor. Teşekkürler! – Muhd

+1

İki sayfam varsa - sayfa 2 ve sayfa 3 - bilginin bir kısmı da doldurulmalı, bunları iki farklı scrapy'de sırayla nasıl arayabilirim.Örnekler? Yarı doldurulmuş öğeyi 'meta' seçeneğine her ikisine de aktarabilirim, ancak son 'öğenin' sayfa 1 ve sayfa 2 + sayfa 3'teki verilere sahip olmasını istiyorum. – dowjones123

İlgili konular