Работа со строками в Python приводит к странным кавычкам - PullRequest
1 голос
/ 01 сентября 2011

в настоящее время я работаю с scrapy , которая представляет собой веб-среду для сканирования на основе python. Данные извлекаются из HTML с помощью XPATH . (Я новичок в Python) Чтобы обернуть данные, Scrap использует элементы, например,

item = MyItem()

item['id'] = obj.select('div[@class="id"]').extract()

Когда идентификатор печатается как print item['id'], я получаю следующий вывод

[u'12346']

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

"[u""someText""]"

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

Кто-нибудь знает, что означают кавычки? Как я уже сказал, текст someText был просканирован, как и все другие текстовые данные, например, от

<a>someText</a>

Есть идеи?

Edit:

Мой паук сканирует все страницы блога. Вот точный вывод

[u'41039'];[u'title]

[u'40942'];"[u""title""]"]

...

Извлечено с помощью

item['title']   = site.select('div[@class="header"]/h2/a/@title').extract()

Я заметил, что всегда одни и те же сообщения в блоге имеют эти кавычки. Таким образом, они не появляются случайно. Но в тексте нет ничего особенного. Например. этот заголовок производит кавычки

<a title="Xtra Pac Telekom web'n'walk Stick Basic für 9,95" href="someURL">
    Xtra Pac Telekom web'n'walk Stick Basic für 9,95</a>

Итак, моя первая мысль была о том, что это из-за некоторых специальных символов, но их нет.

Это происходит только тогда, когда элементы записываются в CSV, когда я печатаю их в cmd, кавычки отсутствуют.

Есть идеи?

1 Ответ

4 голосов
/ 02 сентября 2011

Python может использовать как одинарные ', так и двойные " кавычки. Когда он печатает что-то, он обычно выбирает одинарные кавычки, но переключается на двойные кавычки, если текст при печати содержит одинарные кавычки (чтобы избежать кавычек в строке):

так обычно, это печать [u'....'], но иногда у вас есть текст, который содержит символ ', а затем он печатает [u"...."].

, затем есть дополнительное усложнение записи в CSV. если в csv записана строка, содержащая только ', то она записывается как есть. поэтому [u'....'] записывается как [u'....'].

но если оно содержит двойные кавычки, то (1) все помещается в двойные кавычки и (2) любые двойные кавычки повторяются дважды. поэтому u["..."] записывается как "[u""...""]". если вы прочитаете данные csv обратно с помощью библиотеки csv, то они будут обнаружены и удалены, поэтому это не вызовет никаких проблем.

так что это комбинация текста, содержащего одинарные кавычки (заставляющие python использовать двойные кавычки) и правила цитирования CSV (которые применяются к двойным кавычкам, но не к одинарным кавычкам).

если это проблема, библиотека csv имеет различные опции для изменения поведения - http://docs.python.org/library/csv.html

страница википедии объясняет правила цитирования более подробно - поведение здесь показано на примере с "Super, ""luxurious"" truck"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...