2

目前正在使用 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'>,

在我的外壳中 - 我如何打印产品包含的所有内容?(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返回我的数据的简短版本可能是错误的?

4

1 回答 1

2

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

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

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

于 2015-06-28T08:08:04.393 回答