2013-07-20 4 views
2

Gratter débutant ici. J'utilise Scrapy pour obtenir un tas de données à partir d'un seul site. Quand je lance le script, il fonctionne très bien pendant quelques minutes, mais ralentit ensuite, à peu près arrêts et jette sans cesse la paire suivante d'erreurs avec des URL différentes, il essaie de gratter:502 Erreur avec Scrapy Script

2013-07-20 14:15:17-0700 [billboard_spider] DEBUG: Retrying <GET http://www.billboard.com/charts/1981-01-17/hot-100> (failed 1 times): Getting http://www.billboard.com/charts/1981-01-17/hot-100 took longer than 180 seconds. 

2013-07-20 14:16:56-0700 [billboard_spider] DEBUG: Crawled (502) <GET http://www.billboard.com/charts/1981-01-17/hot-100> (referer: None) 

Les tas erreur ci-dessus avec URL différentes et je ne sais pas ce qui le cause ...

est ici le script:

import datetime 
from scrapy.item import Item, Field 
from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 


class BillBoardItem(Item): 
    date = Field() 
    song = Field() 
    artist = Field() 


BASE_URL = "http://www.billboard.com/charts/%s/hot-100" 


class BillBoardSpider(BaseSpider): 
    name = "billboard_spider" 
    allowed_domains = ["billboard.com"] 

    def __init__(self): 
     date = datetime.date(year=1975, month=12, day=27) 

     self.start_urls = [] 
     while True: 
      if date.year >= 2013: 
       break 

      self.start_urls.append(BASE_URL % date.strftime('%Y-%m-%d')) 
      date += datetime.timedelta(days=7) 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     date = hxs.select('//span[@class="chart_date"]/text()').extract()[0] 

     songs = hxs.select('//div[@class="listing chart_listing"]/article') 
     item = BillBoardItem() 
     item['date'] = date 
     for song in songs: 
      try: 
       track = song.select('.//header/h1/text()').extract()[0] 
       track = track.rstrip() 
       item['song'] = track 
       item['artist'] = song.select('.//header/p[@class="chart_info"]/a/text()').extract()[0] 
       break 
      except: 
       continue 

     yield item 
+0

Serait-ce que vous êtes banni? http://doc.scrapy.org/fr/0.16/topics/practices.html#bans – Tiago

Répondre

2

l'araignée fonctionne pour moi et écorchures les données sans aucun problème. Donc, comme l'a supposé @Tiago, vous avez été banni.

Lisez à l'avenir how to avoid getting banned et ajustez votre paramètre scrapy de manière appropriée. Je commencerais par essayer d'augmenter DOWNLOAD_DELAY et de faire pivoter vos adresses IP.

En outre, envisagez de passer à l'aide d'un véritable navigateur automatisé, comme selenium.

Également, consultez si vous pouvez obtenir la date à partir des flux XML RSS: http://www.billboard.com/rss.

Espérons que ça aide.

+0

alecxe - merci, comme toujours! –

+0

Vous êtes les bienvenus. Faites-moi savoir si vous aurez besoin d'aide pour passer au sélénium si vous décidez. – alecxe