मैंने कंसोल में जो देख सकता हूं उसे अपलोड करने का प्रयास किया हैमैंने एक वेबसाइट को दोबारा क्रॉल करने के लिए स्क्रैपी में एक स्क्रिप्ट लिखी है। लेकिन किसी कारणवश नहीं हो पा रहा है। मैंने उदात्त में xpaths का परीक्षण किया है और यह पूरी तरह से काम कर रहा है। इसलिए, इस समय मैं ठीक नहीं कर सकता कि मैंने क्या गलत किया है।

"items.py" में शामिल हैं:

import scrapy
class CraigpItem(scrapy.Item):
    Name = scrapy.Field()
    Grading = scrapy.Field()
    Address = scrapy.Field()
    Phone = scrapy.Field()
    Website = scrapy.Field()

"craigsp.py" नाम की मकड़ी में शामिल हैं:

from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor

class CraigspSpider(CrawlSpider):
    name = "craigsp"
    allowed_domains = ["craigperler.com"]
    start_urls = ['https://www.americangemsociety.org/en/find-a-jeweler']
    rules=[Rule(LinkExtractor(restrict_xpaths='//area')),
               Rule(LinkExtractor(restrict_xpaths='//a[@class="jeweler__link"]'),callback='parse_items')]    

    def parse_items(self, response):
        page = response.xpath('//div[@class="page__content"]')
        for titles in page:
            AA= titles.xpath('.//h1[@class="page__heading"]/text()').extract()
            BB= titles.xpath('.//p[@class="appraiser__grading"]/strong/text()').extract()
            CC = titles.xpath('.//p[@class="appraiser__hours"]/text()').extract()
            DD = titles.xpath('.//p[@class="appraiser__phone"]/text()').extract()
            EE = titles.xpath('.//p[@class="appraiser__website"]/a[@class="appraiser__link"]/@href').extract()
            yield {'Name':AA,'Grading':BB,'Address':CC,'Phone':DD,'Website':EE}

मैं जिस आदेश के साथ चल रहा हूं वह है:

scrapy crawl craigsp -o items.csv

आशा है कि कोई मुझे सही दिशा में ले जाएगा।

0
SIM 7 अप्रैल 2017, 23:29

1 उत्तर

सबसे बढ़िया उत्तर

फ़िल्टर किए गए ऑफ़साइट अनुरोध

इस त्रुटि का अर्थ है कि एक url जो स्क्रैपी के लिए कतार में था, वह allowed_domains सेटिंग पास नहीं करता है।

आपके पास:

allowed_domains = ["craigperler.com"]

और आपका स्पाइडर http://ww.americangemsociety.org क्रॉल करने का प्रयास कर रहा है। आपको या तो इसे allowed_domains सूची में जोड़ना होगा या इस सेटिंग से पूरी तरह छुटकारा पाना होगा।

2
Granitosaurus 7 अप्रैल 2017, 23:42
1
दुर्भाग्य से यह सेटिंग वाइल्डकार्ड का समर्थन नहीं करती है और इसलिए डिफ़ॉल्ट रूप से आपको उन सभी डोमेन को दर्ज करने की आवश्यकता है जिनकी आप हाथ से अपेक्षा कर रहे हैं। हालांकि आप एक मिडलवेयर का विस्तार करके इस कार्यक्षमता को काफी आसानी से बढ़ा सकते हैं, जो रेगेक्स पैटर्न का उपयोग करने की अनुमति देगा (उदाहरण के लिए .+\.com सभी .com डोमेन को अनुमति देने के लिए)। इस मुद्दे पर मेरा उत्तर यहां देखें: stackoverflow.com/questions/39093211/…
 – 
Granitosaurus
8 अप्रैल 2017, 00:01