Python/scrapy - 打印带有长字符串的对象

Python/scrapy - print objects with long strings

目前正在使用 Scrapy,我想看看我在做什么。 但是如果我想打印一个对象,似乎 Scrapy 或者可能 Python 会切断更长的字符串:

    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'>,

在我的 shell 中 - 我如何打印产品包含的所有内容? (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 到 return 我数据的简短版本的错?

Scrapy Selector.xpath 没有 return 字符串。它 returns 选择器对象列表。当您打印选择器时,您正在打印对象的字符串表示形式。所以你正在调用 Selector __str__ 方法,正如你在源代码中看到的那样,它显示了对象 1 的一些选定属性,默认情况下将 html 修剪为前 40 个字符。 要获取字符串列表,您需要调用 extract()。所以你需要:

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

另请注意,您不需要将响应转换为选择器。在最近的 Scrapy 版本中 response.xpath 也可以工作。