Scrapy错过了一些HTML元素

时间:2015-11-22 04:58:18

标签: python web-scraping scrapy

我正在使用scrapy在amazon.com上获取有关书籍的一些数据。 我只想要这本书的名称,作者和价格。我想按类别来做这件事,例如计算机科学书籍。

考虑代码片段(某些亚马逊页面):

<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中找到div元素[@class =&#34; a-column a-span7&#34;]。但是,只返回前两个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

上面的代码执行以下操作:

  1. 获取所有div元素包含有关特定页面上的图书的信息
  2. 获取第一本书&#39;并获得包含书籍价格的div
  3. 获取课程&#39; a-column a-span7&#39;
  4. 的div
  5. 问题在于:我不知道为什么div里面的div元素数量为&a-a-column a-span7&#39;
  6. 我已尝试过不同的方法来获取标签后的div元素&lt; hr&gt;,但似乎scrapy停止在标签&lt; hr&gt;。我尝试过也使用了以下代码,结果只显示了两个元素:

    >>> 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。有关使用标签的一些解释&lt; br&gt;和&lt; hr&gt;,但我不清楚。

1 个答案:

答案 0 :(得分:2)

您可以通过在您的请求中附加user agent来解决您遇到的问题。尝试这样的事情并检查你的结果:

scrapy shell "http://www.amazon.com.br/s/ref=lp_12008582011_nr_n_2?fst=as%3Aoff&rh=n%3A6740748011%2Cn%3A%218169561011%2Cn%3A%218169562011%2Cn%3A12008582011%2Cn%3A12008596011&bbn=12008582011&ie=UTF8&qid=1448202280&rnid=12008582011" -s USER_AGENT='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'