2011-12-04 11 views
9

मैंने अभी स्केपर स्थापित किया है और उनके सरल dmoz tutorial का पालन किया है जो काम करता है। मैंने सिर्फ पायथन के लिए मूल फ़ाइल हैंडलिंग देखा और क्रॉलर को फ़ाइल से यूआरएल की एक सूची पढ़ने की कोशिश की लेकिन कुछ त्रुटियां मिलीं। यह शायद गलत है लेकिन मैंने इसे एक शॉट दिया। क्या कोई मुझे यूआरएल की सूची को स्क्रैप में पढ़ने का उदाहरण दिखाएगा? अग्रिम में धन्यवाद।स्क्रैप फ़ाइल से स्क्रैप करने के लिए यूआरएल की सूची पढ़ें?

from scrapy.spider import BaseSpider 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    f = open("urls.txt") 
    start_urls = f 

    def parse(self, response): 
     filename = response.url.split("/")[-2] 
     open(filename, 'wb').write(response.body) 

उत्तर

30

आप बहुत करीब थे।

f = open("urls.txt") 
start_urls = [url.strip() for url in f.readlines()] 
f.close() 

... बेहतर अभी भी संदर्भ प्रबंधक का उपयोग करने के लिए सुनिश्चित करें फ़ाइल बंद हो चुकी है की उम्मीद होगी:

with open("urls.txt", "rt") as f: 
    start_urls = [url.strip() for url in f.readlines()] 
+2

'readlines()' प्रत्येक पंक्ति के अंत में नई-पंक्तियों बरकरार रखती है। मैंने एक संपादन सबमिट किया है जो नईलाइनों को 'स्ट्रिप()' करेगा और फ़ाइल बंद कर देगा। –

4

डीमॉज़ उम्मीद सिर्फ सूची में बदल दें, तो आपको प्रत्येक पर पट्टी कॉल करनी होगी लाइन। अन्यथा आपको प्रत्येक यूआरएल के अंत में '\ n' मिलता है। अजगर 2.7 में

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [l.strip() for l in open('urls.txt').readlines()] 

उदाहरण

>>> open('urls.txt').readlines() 
['http://site.org\n', 'http://example.org\n', 'http://example.com/page\n'] 
>>> [l.strip() for l in open('urls.txt').readlines()] 
['http://site.org', 'http://example.org', 'http://example.com/page'] 
+0

धन्यवाद, जब मैंने ऊपर ब्रायन के उदाहरण से कोड चलाया तो मैंने यूआरएल स्वरूपण के बारे में त्रुटियों को देखा। स्केपर डीएमओज़ उदाहरण में यूआरएल का हार्ड कोड था, और कॉमा के साथ उद्धरण में था। उद्धरण और अल्पविरामों को हटाने से समस्या का समाधान हुआ, और उन्हें अब प्रति पंक्ति एक पढ़ा जा रहा है। – Anagio

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