【发布时间】:2015-11-22 04:58:18
【问题描述】:
我正在使用 scrapy 获取有关 amazon.com 上书籍的一些数据。 我只想要这本书的名字、作者和价格。我想按类别执行此操作,例如计算机科学书籍。
考虑一下代码的 sn-p(一些亚马逊页面):
<div class="a-row">
::before
<div class="a-column a-span7">
<div class="a-row a-spacing-none">...</div>
<div class="a-row a-spacing-none">...</div>
<hr class="a-divider-normal s-result-divier">
<div class="a-row a-spacing-none">...</div>
<div class="a-row a-spacing-none">...</div>
<div class="a-row a-spacing-none">...</div>
</div>
<div class="a-column a-span5 a-span-last"></div>
::after
</div>
所以,我尝试在 div[@class="a-column a-span7"] 中获取 div 元素。但是,只返回前两个 div 元素。我使用的命令是:
>>> books = response.selector.xpath ('.//div[@class="a-fixed-left-grid-col a-col-right"]')
>>> abook = books[0].xpath('.//div[@class="a-row"]')
>>> prices = abook.xpath ('.//div[@class="a-column a-span7"]')
>>> len (prices.xpath('div'))
2
上面的代码做了以下事情:
- 获取包含特定页面上的书籍信息的所有 div 元素
- 获取第一本“书”并获取包含该书价格的 div
- 获取具有“a-column a-span7”类的 div
- 这就是问题所在:我不知道为什么类 'a-column a-span7' 的 div 中的 div 元素的数量
我尝试了不同的方法来获取标签 之后的 div 元素,但似乎在标签 上的scrapy stop。我也试过使用下面的代码,结果只显示了两个元素:
>>> abook.xpath ('div')
[<Selector xpath='div' data=u'<div class="a-column a-span7"><div class'>, <Selector xpath='div' data=u'<div class="a-column a-span5 a-span-last'>]
我花了一些时间,我无法解决这个问题。我觉得很简单。
在此链接中:stackref。有一些关于使用标签
和
的解释,但我不清楚。
【问题讨论】:
-
你能提供你从哪里抓取这个链接吗?
-
是的。这是链接:goo.gl/9XoOt6。该页面是葡萄牙语(巴西)。
-
找不到问题中提到的
hr标签。class="a-column a-span7"之后只有两个 div -
作者在xpath
div[@class="a-column a-span7"]/div[1]/a/h3/text(),价格在div[@class="a-column a-span7"]/div[2]/a/span/text() -
hr标签仅出现在少数列表中。就像给定链接中的列表 9 一样。您可以尝试通过打印 xpath//*[@id="result_9"]的元素来验证它
标签: python web-scraping scrapy