2012-03-05 63 views
18

我想使用Python Scrapy module來刮掉我網站上的所有URL並將列表寫入文件。我看了一些例子,但沒有看到一個簡單的例子來做到這一點。如何使用Python Scrapy模塊列出來自我網站的所有網址?

+6

的StackOverflow是不是一個網站,請人編寫代碼爲你 - *嘗試一些*,然後來問一個關於一個問題你遇到的具體問題。 – Amber 2012-03-05 02:47:16

+0

你有試過那裏的教程嗎?這是相當自我解釋。如果你/有/嘗試過教程,仍然有問題,請嘗試發佈一些你先試過的代碼(+1 @Amber) – inspectorG4dget 2012-03-05 02:58:41

+3

琥珀色和inspectorG4dget,我寫了這樣做的程序,但不能發佈它因爲我沒有足夠的聲望 - 有一段等待時間。明天早上我會發布解決方案。 – 2012-03-05 06:16:22

回答

40

這裏是爲我工作的Python程序:

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文件。

然後,您可以使用一個管道來進行後期處理這樣的文字:

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 2012-03-06 04:34:55

+0

這個程序有一個小錯誤。 'if not not url.startswith('http://'):'不會正確處理https鏈接。 – 2015-06-27 17:24:05

+0

@JoshuaSnider我更新了它。但這是示例代碼的一小段代碼,所以它並不意味着對所有情況都是權威的。 – 2015-06-27 22:18:16

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

這是否會返回網站內部或外部的鏈接? – 2016-09-06 09:30:56

相關問題