【问题标题】:Scrapy misses some html elementsScrapy 遗漏了一些 html 元素
【发布时间】: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

上面的代码做了以下事情:

  1. 获取包含特定页面上的书籍信息的所有 div 元素
  2. 获取第一本“书”并获取包含该书价格的 div
  3. 获取具有“a-column a-span7”类的 div
  4. 这就是问题所在:我不知道为什么类 '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


【解决方案1】:

您所面临的问题可以通过在您的请求中附上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'

【讨论】:

  • 太棒了!这是现在的工作。谢谢!那么,为什么需要使用 USER_AGENT?
  • 某些网站不允许您提取数据,因此有时它们会阻止或限制对来自无法识别自身的机器人的所有请求的数据访问,即没有任何关联的用户代理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2015-07-11
相关资源
最近更新 更多