2017-02-20 6 views
0

Платформа: Debian 8 + питон 3,4 + Scrapy 1.3.2 Вот мой паук скачать некоторые URLs образуют yahoo.comПочему информация об ошибке не может быть записана в указанный файл?

import scrapy 
import csv 

class TestSpider(scrapy.Spider): 
    name = "quote" 
    allowed_domains = ["yahoo.com"] 
    start_urls = ['url1','url2','url3',,,,'urls100'] 

    def parse(self, response): 
     filename = response.url.split("=")[1] 
     open('/tmp/'+filename+'.csv', 'wb').write(response.body) 

Некоторая информация ошибка возникает, когда для его выполнения:

2017-02-19 21:28:27 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response 
<404 https://chart.yahoo.com/table.csv?s=GLU>: HTTP status code is not handled or not allowed 

https://chart.yahoo.com/table.csv?s=GLU является одним из start_urls.

Теперь я хочу поймать информацию об ошибке.

import scrapy 
import csv 

import logging 
from scrapy.utils.log import configure_logging 
configure_logging(install_root_handler=False) 
logging.basicConfig(
    filename='/tmp/log.txt', 
    format='%(levelname)s: %(message)s', 
    level=logging.INFO 
) 

class TestSpider(scrapy.Spider): 
    name = "quote" 
    allowed_domains = ["yahoo.com"] 
    start_urls = ['url1','url2','url3',,,,'url100'] 

    def parse(self, response): 
     filename = response.url.split("=")[1] 
     open('/tmp/'+filename+'.csv', 'wb').write(response.body) 

Почему информация об ошибке, таких как
2017-02-19 21:28:27 [scrapy.spidermiddlewares.httperror] INFO: Не обращая внимания на ответ >: HTTP код статуса не обрабатывается или не разрешено не может быть записано в /home/log.txt?

Подумайте, eLRuLL, я добавил handle_httpstatus_list = [404].

import scrapy 
import csv 

import logging 
from scrapy.utils.log import configure_logging 
configure_logging(install_root_handler=False) 
logging.basicConfig(
    filename='/home/log.txt', 
    format='%(levelname)s: %(message)s', 
    level=logging.INFO 
) 

class TestSpider(scrapy.Spider): 
    handle_httpstatus_list = [404] 
    name = "quote" 
    allowed_domains = ["yahoo.com"] 
    start_urls = ['url1','url2','url3',,,,'url100'] 

    def parse(self, response): 
     filename = response.url.split("=")[1] 
     open('/tmp/'+filename+'.csv', 'wb').write(response.body) 

Информация об ошибке по-прежнему не может быть записана в файл /home/log.txt, почему?

ответ

0

Используйте атрибут handle_httpstatus_list на вашем паук обрабатывать 404 статусы:

class TestSpider(scrapy.Spider): 
    handle_httpstatus_list = [404]