2015-06-28 3 views
1

В настоящее время работает с Scrapy, и я хотел бы видеть, что я делаю. Но, похоже, как если бы Scrapy или, возможно, Python срезает более длинные строки, если я хочу, чтобы напечатать объект:Python/scrapy - печатать объекты с длинными строками

products = Selector(response).xpath('//div[@class="s-item-container"]') 
    pprint (products) 

Теперь я получаю:

<Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-item-container"><div class'>, 
<Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-item-container"><div class'>, 
<Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-item-container"><div class'>, 

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

С

print (products) 

я получаю: [<Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-[<item-container"><div class'>, <Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-item-container"><div class'>, <Selector xpath='//div[@class="s-item-container"]' data=u'<div class="s-item-container"><div class'>,

Практически то же самое - только в грязной дороге. Возможно, это ошибка Selector(response).xpath, чтобы вернуть короткую версию моих данных?

+1

Это, безусловно, не проблема с Python, я просто напечатал объект, который вернул строку длиной 1000. – Rishav

+1

Что вы получаете от простой 'print (products)'? – Rishav

+0

Это не проблема с 'pprint'. – Rishav

ответ

2

Scrapy Selector.xpath не возвращает строки. Он возвращает список объектов селектора. Когда вы печатаете селектор, вы печатаете строковое представление объекта. Поэтому вы вызываете метод Selector __str__, который, как вы можете видеть в исходном коде, показывает некоторые выбранные атрибуты объекта 1 по умолчанию, обрезая html до первых 40 символов. Чтобы получить список строк, вам необходимо позвонить extract(). Поэтому вам необходимо:

Selector(response).xpath("//text()").extract() 

Также обратите внимание, что вам не нужно преобразовывать ответ в селектор. В последней версии Scrapy также будет работать response.xpath.

+0

Perfect - спасибо за хорошее объяснение. Теперь я получаю u'asfasfasfd ', который, как я только что понял через документы, является строкой unicode, но в MongoDB он сохраняется без u, как строка, если я это делаю: 'Selector (response) .xpath (" // text() "). extract() [0]' Итак, первый элемент списка. – Chris