Я написал паука Scrapy, который извлекает текст со страницы. Паук анализирует и выводит правильно на многих страницах, но некоторые сбрасывают. Я пытаюсь сохранить разрывы строк и форматирование в документе. Страницы типа http://www.state.gov/r/pa/prs/dpb/2011/04/160298.htm правильно отформатированы следующим образом:
7 апреля 2011 г.
Марк С. Тонер
2: 03 вечера EDT
MR. ТОНЕР: Добрый день всем. Пара вещей наверху,
и тогда я отвечу на ваши вопросы. Мы осуждаем нападение на невинных
гражданские лица на юге Израиля в самых сильных условиях, а также
как продолжающийся ракетный обстрел из Газы. Как мы повторяли много раз,
нет оправдания преследованию ни в чем не повинных гражданских лиц,
и виновные в этих террористических актах должны быть задержаны
ответственности. Мы особенно обеспокоены сообщениями, которые указывают
использование современного противотанкового оружия при нападении на мирных жителей
и подтвердить, что все страны имеют обязательства по соответствующим
Резолюции Совета Безопасности ООН по предотвращению незаконных
незаконный оборот оружия и боеприпасов. Также просто краткое заявление -
ВОПРОС: Можем ли мы остановиться на этом хотя бы на одну секунду?
MR. ТОНЕР: Да. Давай, Мэтт.
ВОПРОС: Очевидно, целью этого был школьный автобус. Это делает
добавить к вашему безобразию?
MR. ТОНЕР: Ну, любое нападение на ни в чем не повинных гражданских лиц отвратительно, но
безусловно, характер атаки особенно таков.
В то время как страницы типа http://www.state.gov/r/pa/prs/dpb/2009/04/121223.htm имеют такой вывод без разрывов строк:
2 апреля 2009
Роберт Вуд
11: 53 утра EDTMR. ВУД: Доброе утро всем. Я думаю, что это просто
о еще утром. Добро пожаловать на брифинг. У меня ничего нет,
так что, сэр. ВОПРОС: Северные корейцы перевезли топливозаправщики, или
что угодно, близко к сайту. Они могут или не могут подпитывать это
ракета. Какие слова мудрости у вас есть для северных корейцев в
этот момент? WOOD: Ну, Мэтт, я не буду комментировать, вы
знаете, интеллект имеет значение. Но позвольте мне еще раз сказать, мы призываем
Север воздерживаться от запуска любого типа ракет. Это было бы
контрпродуктивным. Это провокационно. Это еще больше разжигает напряженность в
область. Мы хотим, чтобы Север вернулся к Шестисторонней
рамки и сосредоточиться на денуклеаризации. Да. ВОПРОС: Япония также
сказали, что собираются созвать экстренное совещание в Службе безопасности.
Совет, вы знаете, если этот запуск состоится. Это то, что
вы бы тоже искали? WOOD: Хорошо, давайте посмотрим, будет ли этот тест
случается. Мы, конечно, надеемся, что это не так. Опять призыв на север
не делать этого Но, конечно, мы будем - если этот тест будет идти вперед,
у нас будут переговоры с нашими союзниками.
Код, который я использую, выглядит следующим образом:
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 страницы. На страницах, которые выводят текст неправильно, абзацы разделены <br> <p></p>
, а на страницах, которые выводят правильно, абзацы содержатся в <p align="left" dir="ltr">
. Так что, хотя я и определил это, я не уверен, как заставить все выводить последовательно в правильной форме.