Работа со строками в Python приводит к странным кавычкам

1

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

item = MyItem()

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

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

[u'12346']

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

"[u""someText""]"

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

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

<a>someText</a>

Есть идеи?

Редактировать:

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

[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, нет кавычек.

Есть идеи?

  • 0
    Это всегда происходит для строк? Можете ли вы разбить его на конкретный контрольный пример, который вы можете опубликовать?
  • 0
    Эти точные результаты вы скопировали и вставили? Печатаете ли вы reprs некоторых вещей и нормальную str версию других?
Теги:
xpath

1 ответ

4
Лучший ответ

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

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

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

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

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

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

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

  • 0
    спасибо за это очень хорошее объяснение :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню