Öğreticilerinde kullandıkları Dmoz web sitesinde Scrapy kullanmak istiyorum, ancak Öğeleri/Alan çiftlerini kullanarak kitap URL'lerindeki (http://www.dmoz.org/Computers/Programming/Languages/Python/Books/) kitapları okumak yerine, oluşturmak istiyorum İstenen değerlerde okuyabilecek bir Öğe Yükleyici (isim, başlık, açıklama).Bir döngü içinde Scrapy Itemloader'ı kullanma
Bu benim items.py dosyasıdır:
from scrapy.item import Item, Field
from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import Identity
class DmozItem(Item):
title = Field(
output_processor=Identity()
)
link = Field(
output_processor=Identity()
)
desc = Field(
output_processor=Identity()
)
class MainItemLoader(ItemLoader):
default_item_class = DmozItem
default_output_processor = Identity()
Ve örümcek dosyası: Farklı alternatifler bir dizi çalıştılar
import scrapy
from scrapy.spiders import Spider
from scrapy.loader import ItemLoader
from tutorial.items import MainItemLoader, DmozItem
from scrapy.selector import Selector
class DmozSpider(Spider):
name = 'dmoz'
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
]
def parse(self, response):
for sel in response.xpath('//div[@class="site-item "]/div[@class="title-and-desc"]'):
l = MainItemLoader(response=response)
l.add_xpath('title', '/a/div[@class="site-title"]/text()')
l.add_xpath('link', '/a/@href')
l.add_xpath('desc', '/div[@class="site-descr "]/text()')
yield l.load_item()
. Ana konunun itemloader deklarasyonunun "response = response" kısmında olduğundan şüpheleniyorum, fakat bununla ilgili scrapy belgelerinin başlarını veya kuyruklarını yapamıyorum. Seçiciyi kullanabilir miyim = "blah" sözdizimi nerede bakmalıyım?
Bunu çalıştırırsam, 22 boş parantezin bir listesini (doğru kitap sayısı) alırım. Her bir add_xpath satırındaki ilk eğik çizgiyi çift eğik çizgi olacak şekilde değiştirirsem, TÜM VERİLERİ içeren 22 aynı listeyi alırım (şaşırtıcı olmayan şekilde).
Bunu nasıl yazabilirim, itemloader her farklı kitap için istenen alanları içeren yeni bir liste yapar?
Teşekkür ederiz!
Çok teşekkürler! Çözümün çok basit olduğuna inanamıyorum! Bir takip olarak - bu durumun geçerli olduğuna inanıyorum ama onay için minnettarım: gerçek add_xpath deyiminde regex kullanamazsınız, bunun yerine bir giriş işlemcisi aracılığıyla bununla ilgilenirsiniz, doğru mu? Yine, teşekkürler, bu bir gadfly oldu. –
@PauloBurada, normal ifadeleri kullanmaya devam edebilirsiniz - "re" argümanını kullanın, örnek [burada] (http://doc.scrapy.org/en/latest/topics/loaders.html#scrapy.loader.ItemLoader. add_xpath). – alecxe