【问题标题】:xpath selector return null in scrapy shellxpath选择器在scrapy shell中返回null
【发布时间】:2019-01-07 02:35:13
【问题描述】:

我正在尝试从这个 url https://www.farfetch.com/shopping/men/gucci-white-rhyton-web-print-leather-sneakers-item-12889013.aspx?storeid=9359 抓取一些数据

html 看起来像这样:

<div class="cdb2b6" id="bannerComponents-Container">
  <p class="_41db0e _527bd9 eda00d" data-tstid="merchandiseTag">New Season</p>
  <div class="_1c3e57">
    <h1 class="_61cb2e" itemprop="brand" itemscope="" itemtype="http://schema.org/Brand">
    <a href="/shopping/men/gucci/items.aspx" class="fd9e8e e484bf _4a941d f140b0" data-trk="pp_infobrd" data-tstid="cardInfo-title" itemprop="url" aria-label="Gucci">
    <span itemprop="name">Gucci</span>
    </a>
    </h1>
  </div>
 </div>

我在scrapy shell中运行response.xpath('//div[@id="bannerComponents-Container"]/@class'),但我得到的是:

In [1]: response.xpath('//div[@id="bannerComponents-Container"]/@class')
Out[1]: []

为什么?我在 Amazon、Ebay 等上遇到了类似的问题,我的 xpath 选择器似乎不起作用

【问题讨论】:

  • 我用 HTML 测试了表达式,它确实有效。所以错误很可能在其他地方。
  • @zx482 你认为它还能在哪里?我不知道如何解决这个问题
  • @darbulix,根据 SO 规则,您应该提供重现问题的代码。
  • @derloopkat 没有代码。我在 Scrapy shell 中运行它

标签: xpath web-scraping scrapy


【解决方案1】:

这是因为headers。定义一个并得到你所追求的。请尝试以下操作:如果您退出 headers,结果将变为无。

import requests
from scrapy import Selector

LINK = 'https://www.farfetch.com/bd/shopping/men/gucci-white-rhyton-web-print-leather-sneakers-item-12889013.aspx?storeid=9359'

def get_item(url):
    res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
    sel = Selector(res)
    name = sel.xpath('//div[@id="bannerComponents-Container"]//span[@itemprop="name"]/text()').extract_first()
    print(name)

if __name__ == '__main__':
    get_item(LINK)

输出:

Gucci

【讨论】:

  • 为什么我需要定义一个标题?你可以解释吗?我尝试在亚马逊等其他电子商务平台上进行相同的抓取,但没有任何问题
  • 因为这是让网站知道请求不是来自机器人而是来自真正的浏览器或人类的最简单的方法。谢谢。
  • 顺便说一句,您不能将一个站点与另一个站点进行比较,因为每个站点都是独立的,并且在一个站点上实现的逻辑在应用于另一个站点时可能不会带来成功。
  • 啊,我明白了。因此,如果我搜索“headers web Scarping”,我能否找到更多关于如何确保请求来自真正的浏览器/人类而不是机器人的信息?
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2020-12-10
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 2016-12-02
相关资源
最近更新 更多