2012-03-05 9 views
18

Python Scrapy moduleを使用して、私のウェブサイトからすべてのURLを削り取り、そのリストをファイルに書きたいとします。私は例を見ましたが、これを行うための簡単な例は見ませんでした。Python Scrapyモジュールを使用して、私のウェブサイトのすべてのURLを一覧表示するにはどうすればよいですか?

from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 

DOMAIN = 'example.com' 
URL = 'http://%s' % DOMAIN 

class MySpider(BaseSpider): 
    name = DOMAIN 
    allowed_domains = [DOMAIN] 
    start_urls = [ 
     URL 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     for url in hxs.select('//a/@href').extract(): 
      if not (url.startswith('http://') or url.startswith('https://')): 
       url= URL + url 
      print url 
      yield Request(url, callback=self.parse) 

保存このspider.pyと呼ばれるファイル内:

+6

を使用することになりStackOverflowのはあなたのためにあなたのコードを書くために人々を依頼するサイトではありません - * *何かをしようとし、次いで、約質問を来りますあなたが走っている特定の問題。 – Amber

+0

チュートリアルを試しましたか?それはかなり自明です。チュートリアルをしても試しても問題が残っている場合は、最初に試したコード(+1 @Amber) – inspectorG4dget

+3

アンバーとinspectorG4dgetを投稿してください。これを行うプログラムを作成しましたが、まだ投稿できません私は十分な評判がないので、待ち時間があります。私は明日の朝に解決策を投稿します。 –

答えて

40

は、ここで私のために働いたPythonプログラムです。

あなたは、プロセスにこのテキストを投稿するシェルのパイプラインを使用することができます。

bash$ scrapy runspider spider.py > urls.out 
bash$ cat urls.out| grep 'example.com' |sort |uniq |grep -v '#' |grep -v 'mailto' > example.urls 

これは私に私のサイト内のすべてのユニークなURLのリストを提供します。

+2

それは素晴らしいです。あなたは答えを持っています。今度は答えを受け入れてください...そして、ああ、あなたを待っている「自己学習者」バッジがあるかもしれません。 :) – Nishant

+0

このプログラムには小さなバグがあります。 'not url.startswith( 'http://'):'の行は、httpsリンクを正しく処理しません。 –

+0

@JoshuaSnider私はそれを更新しました。しかし、これはサンプルコードの短い断片なので、すべての状況に対して権威あるものではありません。 –

12

クリーナー何か(そしておそらくより有用)がLinkExtractor

from scrapy.linkextractors import LinkExtractor 

    def parse(self, response): 
     le = LinkExtractor() # empty for getting everything, check different options on documentation 
     for link in le.extract_links(response): 
      yield Request(link.url, callback=self.parse) 
+0

これはウェブサイト内または外部のリンクを返しますか? –

関連する問題