2015-11-30 4 views
0

Я пытаюсь узнать, как работает веб-скребок с использованием python. Я пытаюсь использовать Scrapy для сбора некоторых данных с веб-сайта morningstar. По сути, я хотел бы, чтобы программа читала мой файл csv с рядом URL-адреса morningstar. Затем мне нужна программа для анализа таблицы «Other Classes Info» на Morningstar. Моя проблема заключается в том, что я продолжаю получать: сканирование 0 страниц (на 0 страниц/мин), очистка 0 пунктов (по 0 пунктов/мин). Любая помощь будет оценена по достоинству.Проблема со скрипом: Сканирование 0 страниц (на 0 страницах/мин)

morningSpider.py

import scrapy 
from scrapy.spiders import Spider, Rule 
from scrapy.linkextractors import LinkExtractor 
from .. import items 
from scrapy.http import Request 
import csv 

def get_urls_from_csv(): 
    with open("C:\Users\kate\Desktop\morningStar\morningTest.csv", 'r') as f: 
     data = csv.reader(f) 
     scrapurls = [] 
     for row in data: 
      for column in row: 
       scrapurls.append(column) 
     return scrapurls 

class morningSpider(Spider): 
    name = "morningSpider" 
    allowed_domains = [] 
    #start_urls = scrapurls 

    rules = (
     Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', 
     follow=True), 
    ) 

    def start_requests(self): 
     return [scrapy.http.Request(url=start_url) for start_url in get_urls_from_csv()] 

    def parse(self, response): 
     for sel in response.xpath('//table[@class="r_table1 text2"]//table/tr')[1:]: 
      item = items.SpiderItem 
      item['FundName'] = row.select("td[2]/text()").extract()[0] 
      item['FrontLoad'] = row.select("td[3]/text()").extract()[0] 
      item['DeferredLoad'] = row.select("td[4]/text()").extract()[0] 
      item['ExpenseRatio'] = row.select("td[5]/text()").extract()[0] 
      item['MinInitPurchase'] = row.select("td[6]/text()").extract([0] 
      item['Actual'] = row.select("td[7]/text()").extract()[0] 
      item['PurchaseConstraint'] = row.select("td[8]/text()").extract()[0] 
      item['ShareClassAttributes'] = row.select("td[9]/text()").extract()[0] 
      yield item 

items.py

from scrapy.item import Item, Field 

class MorningItem(Item): 
     # define the fields for your item here like: 
     # name = scrapy.Field() 
     FundName = Field() 
     FrontLoad = Field() 
     DeferredLoad = Field() 
     ExpenseRatio = Field() 
     MinInitPurchase = Field() 
     Actual = Field() 
     PurchaseConstraint = Field() 
     ShareClassAttributes = Field() 
     pass 

Выход

2015-11-29 18:46:26 [scrapy] INFO: Scrapy 1.0.3 started (bot: morningScrape) 
2015-11-29 18:46:26 [scrapy] INFO: Optional features available: ssl, http11 
2015-11-29 18:46:26 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'morningScrape.spiders', 'SPIDER_MODULES':  
['morningScrape.spiders'], 'BOT_NAME': 'morningScrape'} 
2015-11-29 18:46:26 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
2015-11-29 18:46:26 [scrapy] INFO: Enabled downloader middleware: 
HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware,  
Retry Middleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, 
HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, 
ChunkedTransferMiddleware, DownloaderStats 
2015-11-29 18:46:26 [scrapy] INFO: Enabled spider middlewares: 
HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, 
UrlLengthMiddleware, DepthMiddleware 
2015-11-29 18:46:26 [scrapy] INFO: Enabled item pipelines: 
2015-11-29 18:46:26 [scrapy] INFO: Spider opened 
2015-11-29 18:46:26 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), 
scraped 0 items (at 0 items/min) 
2015-11-29 18:46:26 [scrapy] DEBUG: Telnet console listening on  

2015-11-29 18:46:26 [scrapy] DEBUG: Filtered duplicate request: <GET 
SOMEURL> - no more duplicates will be shown (see DUPEFILTER_DEBUG to 
show all duplicates) 
2015-11-29 18:46:27 [scrapy] DEBUG: Crawled (200) <GET  
ANOTHERURL> (referer: None) 
2015-11-29 18:46:27 [scrapy] INFO: Closing spider (finished) 
2015-11-29 18:46:27 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 267, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 8691, 
'downloader/response_count': 1, 
'downloader/response_status_count/200': 1, 
'dupefilter/filtered': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2015, 11, 29, 23, 46, 27, 255000), 
'log_count/DEBUG': 3, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2015, 11, 29, 23, 46, 26, 848000)} 
2015-11-29 18:46:27 [scrapy] INFO: Spider closed (finished) 

ответ

0

мне делать, если вы не должны знать, делиться этими URL-адресами, но проверять их в журнале, я вижу, что сначала xpath не получает никаких элементов, а второй URL-адрес не имеет общего доступа.

Тогда вы перекрывая parse метод, который необходим для CrawlSpider, который является тот, который использует rules, но вы используете Spider, который не использует правила, чтобы они не будут относиться к вашему ползания.

Кроме того, если вы измените Spider на CrawlSpider, что правило не может иметь follow=True и callback!=None, потому что они противоположны друг другу.

0
  1. , как сообщение от @eLRuLL вы должны использовать scrapy.spiders.CrawlSpider

  2. 0 страниц

    не имеет значения.
    См. dupefilter/filtered в журнале. Это означает, что ваш URL-адрес был отфильтрован.
    См. Настройки DUPEFILTER_CLASS в scrapy.settings.default_settings, чтобы перезаписать эти настройки, чтобы предотвратить фильтр.

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