Сохранение разрывов строк при синтаксическом анализе с помощью Scrapy в Python

Я написал паука Scrapy, который извлекает текст со страницы. Паук правильно разбирает и выводит данные на многих страницах, но на некоторых сбрасывается. Я пытаюсь сохранить в документе разрывы строк и форматирование. Такие страницы, как http://www.state.gov/r/pa/prs/dpb/2011/04/160298.htm отформатированы правильно, например:

7 апреля 2011 г.

Марк К. Тонер

14:03 EDT

MR. ТОНЕР: Добрый день всем. Пара вещей наверху, а потом я отвечу на ваши вопросы. Мы осуждаем нападение на невиновных гражданские лица на юге Израиля также в самых решительных условиях как продолжающийся ракетный обстрел из Газы. Как мы неоднократно повторяли, нет оправдания нападениям на ни в чем не повинных мирных жителей, и виновные в этих террористических актах должны быть задержаны подотчетен. Мы особенно обеспокоены сообщениями, в которых использование современного противотанкового оружия при нападении на мирных жителей и подтверждаем, что все страны имеют обязательства по соответствующим Резолюции Совета Безопасности ООН по предотвращению незаконных торговля оружием и боеприпасами. Также краткое заявление -

ВОПРОС: Можем ли мы остановиться на этом хотя бы на одну секунду?

MR. ТОНЕР: Ага. Давай, Мэтт.

ВОПРОС: По всей видимости, целью этого был школьный автобус.Это добавить к вашему возмущению?

MR. ТОНЕР: Что ж, любое нападение на мирных жителей отвратительно, но конечно, характер нападения особенно таков.

В то время как страницы вроде http://www.state.gov/r/pa/prs/dpb/2009/04/121223.htm имеют такой вывод без разрывов строк:

Апрель 2, 2009

Роберт Вуд

11:53 EDTMR. ВУД: Доброе утро всем. Я думаю, это просто примерно еще утро. Добро пожаловать на брифинг. У меня ничего нет, Итак, сэр. ВОПРОС: Северные корейцы переместили танкеры-заправщики, или что угодно, рядом с сайтом. Они могут или не могут подпитывать это ракета. Какие мудрые слова вы можете сказать северокорейцам? в этот момент? ВУД: Что ж, Мэтт, я не буду комментировать, ты знаете, интеллект имеет значение. Но позвольте мне еще раз сказать, мы призываем Север - воздержаться от пусков ракет любого типа. Это было бы контрпродуктивно. Это провокационно. Это еще больше разжигает напряженность в область. Мы хотим, чтобы Север вернулся к шестисторонке. рамок и сосредоточить внимание на денуклеаризации. Да. ВОПРОС: Япония также сказали, что собираются созвать экстренное совещание в Службе безопасности. Совет, если этот запуск состоится. Это то, что вы также искали бы? ВУД: Что ж, посмотрим, бывает. Мы, конечно, надеемся, что это не так. Снова призывая к северу не делать этого. Но, конечно, мы будем - если этот тест будет продолжен, мы будем вести переговоры с нашими союзниками.

Я использую следующий код:

def parse_item(self, response):
    self.log('Hi, this is an item page! %s' % response.url) 

    hxs = HtmlXPathSelector(response)

    speaker = hxs.select("//span[contains(@class, 'official_s_name')]") #gets the speaker
    speaker = speaker.select('string()').extract()[0] #extracts speaker text
    date = hxs.select('//*[@id="date_long"]') #gets the date
    date = date.select('string()').extract()[0] #extracts the date
    content = hxs.select('//*[@id="centerblock"]') #gets the content
    content = content.select('string()').extract()[0] #extracts the content

    texts = "%s\n\n%s\n\n%s" % (date, speaker, content) #puts everything together in a string

    filename = ("/path/StateDailyBriefing-" + '%s' ".txt") % (date) #creates a file using the date

    #opens the file defined above and writes 'texts' using utf-8
    with codecs.open(filename, 'w', encoding='utf-8') as output:
        output.write(texts)

Я думаю, что проблема заключается в форматировании HTML страницы.На страницах, которые выводят текст неправильно, абзацы разделяются

, а на страницах, которые выводят правильно текст, абзацы содержатся в пределах

. Итак, хотя я это определил, я не уверен, как сделать так, чтобы все выводилось последовательно в правильной форме.

5
задан user1074057 5 January 2012 в 18:50
поделиться