2015-07-06 15 views
5

Scrapy ile sorun yaşıyorum. Verilen URL başına 1000 adede kadar iç bağlantıyı kaldıracak kodlara ihtiyacım var. Kodum komut satırında çalışırken çalışır, ancak örümcek durmaz, sadece mesajı alır.N öğeleri kazındıktan sonra Scrapy'yi durdurun

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.item import Item, Field 
from scrapy.contrib.closespider import CloseSpider 

class MyItem(Item): 
    url= Field() 

class MySpider(CrawlSpider): 
    name = 'testspider1' 
    allowed_domains = ['angieslist.com'] 
    start_urls = ['http://www.angieslist.com'] 

    rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=True),) 

    def parse_url(self, response): 
     item = MyItem() 
     item['url'] = response.url 

     scrape_count = self.crawler.stats.get_value('item_scraped_count') 
     print scrape_count 

     limit = 10 

     if scrape_count == limit: 
      raise CloseSpider('Limit Reached') 

     return item 
+0

bunu durmuyor emin misiniz? CloseSpider alındıktan sonra zaten talep edilen şeyleri işlemek için terazinin devam edeceğine inanıyorum. Demek istediğim, hemen durmayacak, ama yeni öğeler istenmeyecek – Alik

+1

[This] (http://stackoverflow.com/questions/30928177/scrapy-limit-requests-for-testing) sizin için ilginç olabilir. –

+0

Haklısın, durmuyor. Ancak, bu süreci hızlandırmayı planlıyorum ve gereksiz işlemleri kaldırmak istiyorum. "Dime'de durmak" için bir yol olacağını umuyordum. sözde. –

cevap

4

Benim sorunum yanlış yerde yakın örümcek uygulamak çalışıyordum şu şekildedir:

Benim kodudur. Settings.py dosyasında ayarlanması gereken bir değişken. Oraya manuel olarak koyduğumda veya komut satırında bir argüman olarak ayarladığımda, işe yaradı (N değerinin 10-20 arasında durması).

settings.py:

BOT_NAME = 'internal_links' 
SPIDER_MODULES = ['internal_links.spiders'] 
NEWSPIDER_MODULE = 'internal_links.spiders' 
CLOSESPIDER_PAGECOUNT = 1000 
ITEM_PIPELINES = ['internal_links.pipelines.CsvWriterPipeline'] 
# Crawl responsibly by identifying yourself (and your website) on the user-agent 
USER_AGENT = 'yo mama' 
LOG_LEVEL = 'DEBUG' 
+0

Aynı metodolojiyi uyguladım ve dediğiniz gibi, istenen değerin 10-20'si arasında duruyor. Bunun neden olduğunu biliyor musun? Tamlığı için örümcekimin anında durmasını istiyorum! – gtlambert

+0

Hatırladığım kadarıyla, süreç talep edilirken süreç uyuşmuyor ve dolaysız değil. Olsa da uzun bir zaman oldu ve bellek üzerinde çalışıyorum, bu artık böyle olmayabilir. –

+0

En azından kullanıcı aracısında kendinizi tanımlayarak sorumluluk altında tarandınız –

İlgili konular