2013-12-21 6 views
-1

Я пытаюсь прочитать файл, который содержит список доменов для обхода. Результаты добавляются в файл (имя файла, соответствующее домену). Когда я пытаюсь запустить код Scrapy ползания яблокоОшибка при попытке прочитать файл в scrapy

Он выдает ошибку:

def __init__(self)     
SyntaxError: invalid syntax 

DOMAIN.txt содержит: anything.com hello.com

Это мой код.

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item, Field 
from scrapy.utils.response import get_base_url 
from scrapy.utils.url import urljoin_rfc 


class MySpider(CrawlSpider): 

    name = 'crawl' 
    allowed_domains = [] 
    start_urls = [] 

    def __init__(self): 
     for line in open('domain.txt', 'r').readlines(): 
     self.allowed_domains.append(line) 
     self.start_urls.append(line) 
     rules = [Rule(SgmlLinkExtractor(allow=()), follow=True, callback='parse_item')] 
     super(MySpider,self).__init__() 


    def parse_item(self, response): 
    sel = HtmlXPathSelector(response) 
    links = sel.select('//a[contains(@href, "anything")]/@href').extract() 
    items = [] 
    for link in links: 
     item = AnythingItem() 
     item['reference_link'] = response.url 
     yield item 

Обновление 0: Я забыл добавить двоеточие после функции init. Сожалею. Но все же он не работает

+0

определение функции __init __ (Я) 'не действует Python. После имени функции вам понадобится двоеточие. – Blender

ответ

1

вы забыли двоеточие (:) после определения функции, чтобы начать новый блок.

def __init__(self): 

SyntaxError является признаком того, что строка кода вы написали не в состоянии разобрать интерпретатором Python. Это просто означает, что это не допустимая строка кода.

+0

Добавлен двоеточие. Все еще не работает – blackmamba

+0

Какая ошибка вы сейчас получаете? – immortal

+0

Это говорит о закрытии паука. – blackmamba

0

Во-первых, этот код действительно работает?
Он не должен работать, так как вы делаете start_urls = ['http://www.apple.com\n'], что является неправильной ссылкой. Вы должны удалить символ новой строки из конца строки.

Во-вторых, вы уверены, что domain.txt содержит apple.com?
Если это так, то скрипинг должен жаловаться, что в URL-адресе нет схемы.

Возможно, у вас есть http://www.apple.com. В этом случае, вы делаете что:

allowed_domains = ['http://www.apple.com'] 
start_urls = ['http://www.apple.com'] 

И вы хотите, чтобы:

allowed_domains = ['apple.com'] 
start_urls = ['http://www.apple.com'] 
Смежные вопросы