2014-11-04 52 views
0

我正在使用Scrapy檢索關於https://www.indiegogo.com上項目的信息。我想用url格式www.indiegogo.com/projects/[NameOfProject]來抓取所有頁面。但是,我不確定如何在抓取過程中訪問所有這些網頁。我無法找到硬編碼鏈接到所有/projects/頁面的母版頁。所有項目似乎都可以從https://www.indiegogo.com/explore(通過可見鏈接和搜索功能)訪問,但我無法確定將返回所有頁面的鏈接/搜索查詢集。我的蜘蛛代碼如下。這些start_urls和rules約有6000頁,但我聽說應該有接近10倍的那麼多。使用Scrapy查找並刮除特定格式的所有URL

關於具有參數的網址:使用的filter_quick參數值來自「探索」頁面上的「趨勢」,「最終倒數」,「本週新增」和「資金最豐富」的鏈接,顯然缺少不受歡迎和資金不足項目。 per_page url參數沒有最大值。

有什麼建議嗎?謝謝!

class IndiegogoSpider(CrawlSpider): 
name = "indiegogo" 
allowed_domains = ["indiegogo.com"] 
start_urls = [ 
    "https://www.indiegogo.com/sitemap", 
    "https://www.indiegogo.com/explore", 
    "http://go.indiegogo.com/blog/category/campaigns-2", 
    "https://www.indiegogo.com/explore?filter_browse_balance=true&filter_quick=countdown&per_page=50000", 
    "https://www.indiegogo.com/explore?filter_browse_balance=true&filter_quick=new&per_page=50000", 
    "https://www.indiegogo.com/explore?filter_browse_balance=true&filter_quick=most_funded&per_page=50000", 
    "https://www.indiegogo.com/explore?filter_browse_balance=true&filter_quick=popular_all&per_page=50000" 
] 
rules = (
    Rule(LinkExtractor(allow=('/explore?'))), 
    Rule(LinkExtractor(allow=('/campaigns-2/'))), 
    Rule(LinkExtractor(allow=('/projects/')), callback='parse_item'), 
) 
def parse_item(self, response): 
    [...] 

旁註:還有其他的URL格式www.indiegogo.com/projects/[NameOfProject]/[OtherStuff],要麼重定向到所需的URL格式,或給404錯誤,當我嘗試加載它們在瀏覽器中。我假設Scrapy正確地處理了重定向和空白頁面,但會聽取驗證這一點的方法。

+1

你有沒有解決這個問題? – bnussey 2015-10-08 00:25:36

回答

0

那麼,如果你有鏈接到站點地圖,那麼讓Scrapy從那裏抓取頁面並處理它們會更快。 這將工作如下。

從scrapy.contrib.spiders導入SitemapSpider

類MySpider(SitemapSpider):

sitemap_urls = ['http://www.example.com/robots.txt'] 

// **您可以設置規則下sitemap_rules提取網址。

sitemap_rules = [ 
    ('/shop/', 'parse_shop'), 
] 
sitemap_follow = ['/sitemap_shops'] 

def parse_shop(self, response): 
    pass # ... scrape shop here ... 
+0

該站點地圖僅直接鏈接到1000個項目。下面的代碼只能抓取那1000個。我沒有辦法告訴它遵循像CrawlSpider這樣的各種URL來讓它跟隨鏈接,而不是直接在站點地圖上。我錯過了什麼嗎? '類IndiegogoSitemapSpider(SitemapSpider):'' 名稱= 「indiegogo_sitemap」'' sitemap_urls = [ 'https://www.indiegogo.com/sitemap.xml']'' DEF解析(個體,響應): ' '[[...]' – user2592232 2014-11-05 17:20:29

0

嘗試下面的代碼,這將抓取網站,只抓取「indiegogo.com/projects/」

import scrapy 

from scrapy.contrib.spiders import CrawlSpider, Rule 

from scrapy.contrib.linkextractors import LinkExtractor 

from sitemap.items import myitem 

class DmozSpider(CrawlSpider): 

    name = 'indiego' 

    allowed_domains = ['indiegogo.com'] 

     start_urls = [ 

     'http://indiegogo.com' 

    ] 

rules = (Rule(LinkExtractor(allow_domains=['indiegogo.com/projects/']), callback='parse_items', follow= True),) 

     def parse_items(self, response): 

     item = myitem() 

     item['link'] = response.request.url 

     item['title'] = response.xpath('//title').extract() 

     yield item 
+0

停止在第一頁上,返回0結果。我的猜測是,它與'LinkExtractor'的'allow_domains'參數有關。你能解釋一下這個代碼如何解決我的問題的思考過程嗎? – user2592232 2014-11-06 20:20:56

+0

是的,主頁甚至有一個以「indiegogo.com/projects/」 – HackerNews 2014-11-07 08:52:24

+0

開頭的鏈接啊,不,它們都是相對鏈接。我將它切換到允許= ['/ projects /'],但是它只有主頁上列出的12個項目。 – user2592232 2014-11-08 00:50:42

相關問題