मैं उनके ट्यूटोरियल में उपयोग की जाने वाली डीएमओज़ वेबसाइट पर स्केपर का उपयोग करना चाहता हूं, लेकिन आइटम/फ़ील्ड जोड़े का उपयोग करके पुस्तकें यूआरएल (http://www.dmoz.org/Computers/Programming/Languages/Python/Books/) में किताबें पढ़ने की बजाय, मैं बनाना चाहता हूं एक आइटमलोडर जो वांछित मानों (नाम, शीर्षक, विवरण) में पढ़ेगा।लूप में स्केपर आइटमलोडर का उपयोग
यह मेरा items.py फ़ाइल है:
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()
और मेरी मकड़ी फ़ाइल:
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()
मैं अलग विकल्प के एक नंबर की कोशिश की है। मुझे संदेह है कि मुख्य मुद्दा आइटम लोडर घोषणा के "प्रतिक्रिया = प्रतिक्रिया" भाग में है, लेकिन मैं इसके बारे में स्केपर दस्तावेज के सिर या पूंछ नहीं बना सकता। चयनकर्ता = "ब्लाह" वाक्यविन्यास का उपयोग कर सकते हैं जहां मुझे देखना चाहिए?
यदि मैं इसे चलाता हूं, तो मुझे 22 खाली ब्रैकेट्स (पुस्तकों की सही संख्या) की एक सूची मिलती है। यदि मैं डबल स्लैश होने के लिए प्रत्येक add_xpath लाइन में पहला स्लैश बदलता हूं, तो मुझे 22 समान सूचियां मिलती हैं जिनमें सभी डेटा (असुरक्षित रूप से) होते हैं।
मैं इसे कैसे लिख सकता हूं ताकि आइटम लोडर प्रत्येक अलग पुस्तक के लिए वांछित फ़ील्ड वाली एक नई सूची बना सके?
धन्यवाद!
बहुत बहुत धन्यवाद! मुझे विश्वास नहीं है कि समाधान इतना आसान था! अनुवर्ती के रूप में - मेरा मानना है कि यह मामला है लेकिन मैं पुष्टि की सराहना करता हूं: आप वास्तविक add_xpath कथन में रेगेक्स का उपयोग नहीं कर सकते हैं, बल्कि आप इनपुट प्रोसेसर के माध्यम से उस से निपट सकते हैं, सही? दोबारा, धन्यवाद, यह इतनी गड़बड़ी है। –
@PauloBlack सुनिश्चित करें, आप अभी भी नियमित अभिव्यक्तियों का उपयोग कर सकते हैं - 'पुनः' तर्क, नमूना [यहां] (http://doc.scrapy.org/en/latest/topics/loaders.html#scrapy.loader.ItemLoader का उपयोग करें। add_xpath)। – alecxe