в настоящее время я работаю с 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, нет кавычек.
Есть идеи?
Питон можно использовать как одиночную "и двойную" кавычку, как кавычки., когда он печатает что - то из выбирает одиночные кавычки обычно, но переключится на двойные кавычки, если текст при печати содержит одиночные кавычки (чтобы избежать того, чтобы избежать котировка в строка):
поэтому обычно он печатает [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"