2011-12-04 20 views
9

私はscrapyをインストールして、単純なdmoz tutorialに従っています。私はPythonの基本的なファイル処理を調べて、ファイルからURLのリストを読み込むようにクローラを取得しようとしましたが、いくつかのエラーがありました。これはおそらく間違っているが、私はそれを撃った。誰かが私にURLのリストを読んでいる例をスクレイピーに見せてもらえますか?前もって感謝します。Scrapyは、ファイルからスクレイプまでのURLのリストを読み取りますか?

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()は'各ラインの終わりに改行を保持します。改行を 'strip()'してファイルを閉じる編集を提出しました。 –

4

DMOZは、リスト内のファイル名だけを想定している場合、あなたはそれぞれの上にストリップを呼び出す必要がありますライン。それ以外の場合は、各URLの最後に '\ n'が表示されます。 Pythonの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

上記のBriansの例のコードを実行したところ、URLの書式設定に関するエラーが発生しました。 scream dmozの例では、URLはハードコードされており、引用符で囲まれています。引用符とカンマを削除すると問題が解決され、1行に1つずつ読み込まれています。 – Anagio

関連する問題