2015-06-01 12 views
5

मेरे items.py फ़ाइल इस प्रकार है:स्क्रैप का उपयोग कर जावास्क्रिप्ट चर से डेटा निकालने के लिए पुनः() का उपयोग कैसे करें?

from scrapy.item import Item, Field 

class SpiItem(Item): 
    title = Field() 
    lat = Field() 
    lng = Field() 
    add = Field() 

और मकड़ी है:

import scrapy 
import re 

from spi.items import SpiItem 

class HdfcSpider(scrapy.Spider): 
    name = "hdfc" 
    allowed_domains = ["hdfc.com"] 
    start_urls = ["http://hdfc.com/branch-locator"] 

    def parse(self,response): 
     addresses = response.xpath('//script') 
     for sel in addresses: 
      item = SpiItem() 
      item['title'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="title":).+(?=")') 
      item['lat'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="latitude":).+(?=")') 
      item['lng'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="longitude":).+(?=")') 
      item['add'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="html":).+(?=")') 
      yield item 

पूरे जावास्क्रिप्ट कोड, पर देखने के पेज स्रोत, के भीतर लिखे गए: //html/body/table/tbody/tr[348]/td[2]

मेरा कोड क्यों काम नहीं कर रहा है? मैं आइटम फ़ाइल में उल्लिखित चार फ़ील्ड निकालना चाहता हूं।

+0

कृपया अपने खरोज को ठीक। – IanAuld

+0

इंडेंटेशन किया गया। – Aditya

उत्तर

6
बजाय नियमित अभिव्यक्ति का उपयोग कर क्षेत्र द्वारा क्षेत्र निकालने की

,, पूरा locations वस्तु निकालने json.loads() के माध्यम से इसे लोड और अजगर शब्दकोश से वांछित डेटा निकालने आप प्राप्त करेंगे:

def parse(self,response): 
    pattern = re.compile(r"var locations= ({.*?});", re.MULTILINE | re.DOTALL) 
    locations = response.xpath('//script[contains(., "var locations")]/text()').re(pattern)[0] 
    locations = json.loads(locations) 
    for title, data in locations.iteritems(): 
     print title 
+0

लेकिन, मेरा कोड क्यों काम नहीं कर रहा है? – Aditya

+0

@ आदित्य सबसे पहले, आपको पहली जगह स्क्रिप्ट पर लूप करने की आवश्यकता नहीं है - केवल एक ही स्क्रिप्ट है जिसे आपको ढूंढने की आवश्यकता है। इसके अलावा, आप मूल रूप से 'स्क्रिप्ट' टैग की खोज कर रहे हैं जो आपको मिली 'स्क्रिप्ट' टैग के अंदर खोज रहा है, जो तर्कसंगत है, जिसके परिणामस्वरूप कुछ भी नहीं छोड़ा जा रहा है। – alecxe

+1

@ आदित्य वैसे भी, मैंने एक बेहतर और अधिक विश्वसनीय दृष्टिकोण प्रदान किया है। – alecxe

संबंधित मुद्दे