2015-11-07 4 views
0

Я пытаюсь протестировать Scraw CrawlSpider, но я не понимаю, почему он не сканирует. То, что он должен делать, - это обход страницы математики wikipedia только для одного уровня глубины и возврата заголовка каждой обходной страницы. Что мне не хватает? Помощь очень ценится!Scrapy spider не сканирует

from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from scrapy.selector import Selector 
from Beurs.items import WikiItem 

class WikiSpider(CrawlSpider): 
    name = 'WikiSpider' 
    allowed_domains = ['wikipedia.org'] 
    start_urls = ["http://en.wikipedia.org/wiki/Mathematics"] 

    Rules = (
     Rule(LinkExtractor(restrict_xpaths=('//div[@class="mw-body"]//a/@href'))), 
     Rule(LinkExtractor(allow=("http://en.wikipedia.org/wiki/",)),  callback='parse_item', follow=True),   
     ) 


def parse_item(self, response): 
    sel = Selector(response) 
    rows = sel.xpath('//span[@class="innhold"]/table/tr') 
    items = [] 

     for row in rows[1:]: 
      item = WikiItem() 
      item['agent'] = row.xpath('./td[1]/a/text()|./td[1]/text()').extract() 
      item['org'] = row.xpath('./td[2]/text()').extract() 
      item['link'] = row.xpath('./td[1]/a/@href').extract() 
      item['produkt'] = row.xpath('./td[3]/text()').extract() 
     items.append(item) 
     return items 

настройки:

BOT_NAME = 'Beurs' 

SPIDER_MODULES = ['Beurs.spiders'] 
NEWSPIDER_MODULE = 'Beurs.spiders' 
DOWNLOAD_HANDLERS = { 
    's3': None, 
} 
DEPTH_LIMIT = 1 

и журнал:

C:\Users\Jan Willem\Anaconda\Beurs>scrapy crawl BeursSpider 
2015-11-07 15:14:36 [scrapy] INFO: Scrapy 1.0.3 started (bot: Beurs) 
2015-11-07 15:14:36 [scrapy] INFO: Optional features available: ssl, http11, boto 
2015-11-07 15:14:36 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'Beurs.spiders', 'SPIDER_MODULES': ['Beurs.spiders'], 'DEPTH_LIMIT': 1, 'BOT_NAME': 'Beurs'} 
2015-11-07 15:14:36 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
2015-11-07 15:14:36 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2015-11-07 15:14:36 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2015-11-07 15:14:36 [scrapy] INFO: Enabled item pipelines: 
2015-11-07 15:14:36 [scrapy] INFO: Spider opened 
2015-11-07 15:14:36 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2015-11-07 15:14:36 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2015-11-07 15:14:36 [scrapy] DEBUG: Redirecting (301) to <GET https://en.wikipedia.org/wiki/Mathematics> from <GET http://en.wikipedia.org/wiki/Mathematics> 
2015-11-07 15:14:37 [scrapy] DEBUG: Crawled (200) <GET https://en.wikipedia.org/wiki/Mathematics> (referer: None) 
2015-11-07 15:14:37 [scrapy] INFO: Closing spider (finished) 
2015-11-07 15:14:37 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 530, 
'downloader/request_count': 2, 
'downloader/request_method_count/GET': 2, 
'downloader/response_bytes': 60393, 
'downloader/response_count': 2, 
'downloader/response_status_count/200': 1, 
'downloader/response_status_count/301': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2015, 11, 7, 14, 14, 37, 274000), 
'log_count/DEBUG': 3, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 2, 
'scheduler/dequeued/memory': 2, 
'scheduler/enqueued': 2, 
'scheduler/enqueued/memory': 2, 
'start_time': datetime.datetime(2015, 11, 7, 14, 14, 36, 852000)} 
2015-11-07 15:14:37 [scrapy] INFO: Spider closed (finished) 
+0

Так что я изменил разборе часть кода в одном из Dup Step (смотри ниже), но я все равно получаю один и тот же журнал Crawled 0 pages (со скоростью 0 страниц/мин), очищал 0 пунктов (по 0 пунктов/мин). Кто-нибудь знает, что я могу сделать? – Argali

ответ

0

Так в основном ваше регулярное выражение не совсем правильно, и ваш Xpath необходимы некоторые настройки. Я думаю, что код ниже подходит ваше требование поэтому, пожалуйста, попробуйте его и дайте мне знать, если вам нужна дополнительная помощь:

def parse_item(self, response): 
    sel = Selector(response) 
    rows = sel.xpath('//span[@class="innhold"]/table/tr') 
    items = [] 

    for row in rows[1:]: 
     item = SasItem() 
     item['agent'] = row.xpath('./td[1]/a/text()|./td[1]/text()').extract() 
     item['org'] = row.xpath('./td[2]/text()').extract() 
     item['link'] = row.xpath('./td[1]/a/@href').extract() 
     item['produkt'] = row.xpath('./td[3]/text()').extract() 
     items.append(item) 
    return items 
+0

Спасибо за быстрый ответ! Я попробовал ваши твики, но, к сожалению, не получил его. Еще следующая проблема: Сканирование 0 страниц (на 0 страниц/мин), очистка 0 пунктов (по 0 пунктов/мин). Похоже, что сканирование просто не происходит, и я не могу понять, почему. Какие-либо предложения? – Argali

Смежные вопросы