2011-11-26 14 views
5

Öğrenmek için bazı popüler parçalar bulabilmem için, her bir ayarın tarayıcının tunebooklarına kaç kez eklendiğini gösteren bir tablo oluşturmak için thesession.org kazımaya çalışıyorum. Scrub öğretici here ile başladım ve amacına uyacak şekilde değiştirmeye çalışıyorum. Sorun şu ki, thesession.org web sitesinin bazı 10.390 şarkıya sahip olmasına rağmen, kazıyıcım yalnızca 10 tanesinde veri döndürüyor (sadece http://www.thesession.org/tunes/index.php numaralı telefondan). Tüm melodilere (veya üst sıradaki yüz melodilerine) nasıl ulaşabilirim? Herhangi bir tavsiye büyük takdir edilecektir.python'un scrapisi, mevcut tüm URL'lerden veri almıyor gibi görünüyor

benim konsolunu açıp içeren dizine giderek kazıyıcı çalıştırmak

from scrapy.spider import BaseSpider 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from tutorial.items import tuneItem 
from scrapy.conf import settings 

class tunesSpider(CrawlSpider): 

    name = "irishtunes" 
    allowed_domains = ["thesession.org"] 
    start_urls = ["http://www.thesession.org/tunes"] 
    rules = [Rule(SgmlLinkExtractor(allow=['/display/\d+'], deny=['/members/','/recordings/','/index/','/display/\d+/.']), 'parse_tune')] 

    def parse_tune(self, response): 
     x = HtmlXPathSelector(response) 

     tune = tuneItem() 
     tune['url'] = response.url 
     tune['name1'] = x.select("//div[@id='details']//div[@class='box']/h1/text()").extract() 
     tune['name2'] = x.select("//div[@id='details']//div[@class='box']/h2/text()").extract() 
     tune['key'] = x.select("//div[@id='details']//div[@class='box']/p[1]/text()").extract() 
     tune['count'] = x.select("//div[@id='details']//div[@class='box']/p[3]/text()").re('\d+') 
     return tune 

from scrapy.item import Item, Field 

class tuneItem(Item): 
    url = Field() 
    name1 = Field() 
    name2 = Field() 
    key = Field() 
    count = Field() 
    pass 

tune_spider.py items.py: Burada

Bugüne kadar bu var öğreticinin cfg dosyası ve scrapy crawl irishtunes --set FEED_URI=scraped_data.csv --set FEED_FORMAT=csv

'un çalışmasını aşağıda bulabilirsiniz:

C:\Users\BM\Desktop\scrape\tutorial>scrapy crawl irishtunes --set FEED_URI=scrap 
ed_data.csv --set FEED_FORMAT=csv 
2011-11-25 22:45:47-0800 [scrapy] INFO: Scrapy 0.14.0.2841 started (bot: tutoria 
l) 
2011-11-25 22:45:47-0800 [scrapy] DEBUG: Enabled extensions: FeedExporter, LogSt 
ats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState 
2011-11-25 22:45:48-0800 [scrapy] DEBUG: Enabled downloader middlewares: HttpAut 
hMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, De 
faultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMi 
ddleware, ChunkedTransferMiddleware, DownloaderStats 
2011-11-25 22:45:48-0800 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMi 
ddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddle 
ware 
2011-11-25 22:45:48-0800 [scrapy] DEBUG: Enabled item pipelines: 
2011-11-25 22:45:48-0800 [irishtunes] INFO: Spider opened 
2011-11-25 22:45:48-0800 [irishtunes] INFO: Crawled 0 pages (at 0 pages/min), sc 
raped 0 items (at 0 items/min) 
2011-11-25 22:45:48-0800 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:602 
3 
2011-11-25 22:45:48-0800 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2011-11-25 22:45:48-0800 [irishtunes] DEBUG: Redirecting (301) to <GET http://ww 
w.thesession.org/tunes/> from <GET http://www.thesession.org/tunes> 
2011-11-25 22:45:48-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/> (referer: None) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11602> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11602> 
     {'count': [u'1'], 
     'key': [u'Key signature: Dmajor'], 
     'name1': [u"Brendan Begley's"], 
     'name2': [u'polka'], 
     'url': 'http://www.thesession.org/tunes/display/11602'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11593> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11593> 
     {'count': [u'3'], 
     'key': [u'Key signature: Amajor'], 
     'name1': [u'Carleton County Breakdown'], 
     'name2': [u'reel'], 
     'url': 'http://www.thesession.org/tunes/display/11593'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11597> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11597> 
     {'count': [u'3'], 
     'key': [u'Key signature: Dmajor'], 
     'name1': [u"Kasper's Rant"], 
     'name2': [u'hornpipe'], 
     'url': 'http://www.thesession.org/tunes/display/11597'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11594> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11594> 
     {'count': [u'5'], 
     'key': [u'Key signature: Gmajor'], 
     'name1': [u'The Full Of The Bag'], 
     'name2': [u'hornpipe'], 
     'url': 'http://www.thesession.org/tunes/display/11594'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11599> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11599> 
     {'count': [u'1'], 
     'key': [u'Key signature: Adorian'], 
     'name1': [u'The New Steamboat'], 
     'name2': [u'reel'], 
     'url': 'http://www.thesession.org/tunes/display/11599'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11598> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11598> 
     {'count': [u'4'], 
     'key': [u'Key signature: Gmajor'], 
     'name1': [u"Galen's Arrival"], 
     'name2': [u'reel'], 
     'url': 'http://www.thesession.org/tunes/display/11598'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11596> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11596> 
     {'count': [u'2'], 
     'key': [u'Key signature: Amixolydian'], 
     'name1': [u'Culloden Day'], 
     'name2': [u'strathspey'], 
     'url': 'http://www.thesession.org/tunes/display/11596'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11595> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11595> 
     {'count': [u'2'], 
     'key': [u'Key signature: Aminor'], 
     'name1': [u'Miss Sine Flemington'], 
     'name2': [u'barndance'], 
     'url': 'http://www.thesession.org/tunes/display/11595'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11600> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11600> 
     {'count': [u'2'], 
     'key': [u'Key signature: Dmajor'], 
     'name1': [u"Joan Martin's"], 
     'name2': [u'polka'], 
     'url': 'http://www.thesession.org/tunes/display/11600'} 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Crawled (200) <GET http://www.these 
ssion.org/tunes/display/11601> (referer: http://www.thesession.org/tunes/) 
2011-11-25 22:45:49-0800 [irishtunes] DEBUG: Scraped from <200 http://www.theses 
sion.org/tunes/display/11601> 
     {'count': [u'2'], 
     'key': [u'Key signature: Gmajor'], 
     'name1': [u'My Time Inside 2005'], 
     'name2': [u'waltz'], 
     'url': 'http://www.thesession.org/tunes/display/11601'} 
2011-11-25 22:45:49-0800 [irishtunes] INFO: Closing spider (finished) 
2011-11-25 22:45:49-0800 [irishtunes] INFO: Stored csv feed (10 items) in: scrap 
ed_data.csv 
2011-11-25 22:45:49-0800 [irishtunes] INFO: Dumping spider stats: 
     {'downloader/request_bytes': 3655, 
     'downloader/request_count': 12, 
     'downloader/request_method_count/GET': 12, 
     'downloader/response_bytes': 31620, 
     'downloader/response_count': 12, 
     'downloader/response_status_count/200': 11, 
     'downloader/response_status_count/301': 1, 
     'finish_reason': 'finished', 
     'finish_time': datetime.datetime(2011, 11, 26, 6, 45, 49, 500000), 
     'item_scraped_count': 10, 
     'request_depth_max': 1, 
     'scheduler/memory_enqueued': 12, 
     'start_time': datetime.datetime(2011, 11, 26, 6, 45, 48, 10000)} 
2011-11-25 22:45:49-0800 [irishtunes] INFO: Spider closed (finished) 
2011-11-25 22:45:49-0800 [scrapy] INFO: Dumping global stats: 
     {} 

DÜZENLEME: @reclosedev dan cevap yolda beni. sonucu hakkında merak herkes için buraya anlık ... var

(1) melodileri büyük çoğunluğu az 10 üye tunebooks

olan

enter image description here

(2) tüm 10379 melodileri popülerlik (onlar kaç tunebooks ile ölçülen) sitesinden kazımak verebilecek bir güç yasası dağılımı aşağıdaki

enter image description here

(3) Ve burada> 1000 tu olan melodileri vardır Üst sıradaki melodileri isimlerini gösteren sitesinde nebooks ve kaç tunebooks olduklarını

enter image description here

+0

İlginç sonuçlar aralık gibi start_urls veya döngü yerine

kodunuzu on kez çalıştırın ama kendinize şu sıkıntıyı kaydetmiş olabilirsiniz: http://www.irishtune.info/session/tunes.php – alanng

cevap

5

içinde tüm sayfalara bağlantıları çıkartabilir ve örümcek olacak, hangi Rule eklemeniz gerekir follow o:

rules = [ 
    ..., #your existing parse_tune rule 
    Rule(
     SgmlLinkExtractor(
      allow=('/index/new\?new_start=\d+',) 
     ), 
     follow=True, 
    ), 
] 

düzenleme: callback=None varsayılan olarak follow=True demektir çünkü

follow=True, gerekli değildir.

+0

Kurallar, sayfa bağlantısı değil, ayıklamak için kullanılan bağlantıdır (bağlantı parçası). – codersofthedark

+1

@dragosrsupercool Kurallar yalnızca madde ekstraksiyonu için değildir, bkz. [Scrapy docs] (http://doc.scrapy.org/en/0.14/topics/spiders).html # crawlspider-example) – reclosedev

+0

Hızlı cevabınız için teşekkürler, bu hile mükemmel bir şekilde yapılmış gibi görünüyor. Sorgu dizesinin bir parçası olması gerektiğini düşündüm, ama onu örümceğe nasıl çıkaracağımı bilmiyordum. Tekrar teşekkürler. – Ben

0

pek çok yolu olabilir, bırakın beni en basit bir önermek: o (10,100,10)

http://www.thesession.org/tunes/index/new?new_start=10 
http://www.thesession.org/tunes/index/new?new_start=20 
http://www.thesession.org/tunes/index/new?new_start=30 
http://www.thesession.org/tunes/index/new?new_start=40 
http://www.thesession.org/tunes/index/new?new_start=50 
http://www.thesession.org/tunes/index/new?new_start=60 
http://www.thesession.org/tunes/index/new?new_start=70 
http://www.thesession.org/tunes/index/new?new_start=80 
http://www.thesession.org/tunes/index/new?new_start=90 
+1

Hızlı öneri için teşekkürler, cevabınızın mantığını görebiliyorum. @reclosedev olsa da daha verimli bir cevap var. – Ben