2011-11-26 7 views
5

से डेटा प्राप्त नहीं होता प्रतीत होता है। मैं thesession.org स्क्रैप करने की कोशिश कर रहा हूं ताकि मेमबर की ट्यूनबुक में प्रत्येक ट्यून को कितनी बार जोड़ा जा सके, ताकि मुझे सीखने के लिए कुछ लोकप्रिय टुकड़े मिल सकें। मैंने स्केपर ट्यूटोरियल here के साथ शुरू किया है और अपने उद्देश्यों के अनुरूप इसे संशोधित करने की कोशिश कर रहा हूं। समस्या यह है कि हालांकि thesession.org वेबसाइट में कुछ 10,3 9 0 धुनें दिखाई देती हैं, लेकिन मेरा स्क्रैपर केवल उनमें से 10 पर डेटा लौटाता है (केवल http://www.thesession.org/tunes/index.php पर)। मैं सभी धुनों (या शीर्ष रैंक वाले सौ धुनों) पर डेटा कैसे प्राप्त कर सकता हूं? किसी भी सलाह की काफी सराहना की जाएगी।पायथन के स्केपर को सभी उपलब्ध यूआरएल

यहाँ मैं अब तक क्या मिल गया है:

items.py

from scrapy.item import Item, Field 

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

tune_spider.py

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 

मैं अपने कंसोल खोलकर, युक्त निर्देशिका पर जाकर स्क्रेपर चलाने ट्यूटोरियल की सीएफजी फ़ाइल, और चल रहा है scrapy crawl irishtunes --set FEED_URI=scraped_data.csv --set FEED_FORMAT=csv

यहां मुझे यह मिलता है:

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: 
     {} 

संपादित करें: @reclosedev से उत्तर मिल मुझे मिला है। परिणाम के बारे में सोच रहा किसी के लिए, यहाँ एक स्नैपशॉट है ...

(1) धुनों के विशाल बहुमत के कम से कम 10 सदस्यों की tunebooks

हैं

enter image description here

(2) सभी 10,379 धुनों की लोकप्रियता कि मैं इस साइट (के रूप में कितने tunebooks वे में हैं द्वारा मापा गया) से खुरच कर सकता है एक शक्ति जी वितरण इस प्रकार

enter image description here

(3) और यहाँ धुनों कि> 1000 tu में हैं साइट पर nebooks, शीर्ष क्रम के धुनों के नाम दिखा और कितने tunebooks वे कर रहे हैं

enter image description here

+0

परिणाम दिलचस्प start_urls या पाश की जगह, लेकिन आप स्वयं को परेशानी बचा सकते थे: http://www.irishtune.info/session/tunes.php – alanng

उत्तर

5

में आप जो सभी पृष्ठों के लिंक निकाल देंगे, और मकड़ी होगा, Rule जोड़ने की जरूरत है follow यह:

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

संपादित करें:

follow=True क्योंकि callback=None मतलब है follow=True डिफ़ॉल्ट रूप से, आवश्यक नहीं है।

+0

नियम निकालने के लिए कौन सा लिंक है (ट्यून लिंक) और पेज लिंक नहीं। – codersofthedark

+1

@dragosrsupercool नियम न केवल आइटम निष्कर्षण के लिए हैं, देखें [उदाहरण के लिए स्केपर दस्तावेज़] (http://doc.scrapy.org/en/0.14/topics/spiders।एचटीएमएल # क्रॉलस्पाइडर-उदाहरण) – reclosedev

+0

आपके त्वरित उत्तर के लिए धन्यवाद, ऐसा लगता है कि यह चाल पूरी तरह से कर चुकी है। मुझे लगा कि क्वेरी स्ट्रिंग का हिस्सा होना चाहिए था, लेकिन मुझे नहीं पता था कि इसे मकड़ी में कैसे प्राप्त किया जाए। एक बार फिर धन्यवाद। – Ben

0

करने के कई तरीके हो सकते हैं, lemme सबसे सरल एक सुझाव है:

भागो अपने कोड में दस गुना है, यह सीमा की तरह (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

त्वरित सुझाव के लिए धन्यवाद, मैं आपके उत्तर का तर्क देख सकता हूं। @reclosedev का उत्तर है जो हालांकि अधिक कुशल है। – Ben

संबंधित मुद्दे