【问题标题】:Get values from the elements those don't have class attribute with the help of xpath借助 xpath 从没有类属性的元素中获取值
【发布时间】:2017-10-15 10:12:27
【问题描述】:

我想获取那些没有像类这样的属性名称的元素值,我在 xpath 的帮助下尝试了很多次不同的代码,但没有成功。请帮帮我。在此先感谢。

我的代码

response.xpath("//select/option[count(@class)=0]/text()").extract()

获取值的html标签

   <select name="skuAndSize" class="nsg-form--drop-down exp-pdp-size-dropdown exp-pdp-dropdown two-column-dropdown selectBox" data-tooltiptext="Select a Size" required="required" data-error="Select a Size" data-has-fixed-ancestor="true" style="display: none;">
      <option class="exp-pdp-size-not-in-stock" value=""></option>
      <option name="skuId" value="17401288:40" data-label="(EU 40)">EU 40</option>
      <option name="skuId" value="17401287:40.5" data-label="(EU 40.5)">EU 40.5</option>
      <option name="skuId" value="17401286:41" data-label="(EU 41)">EU 41</option>
      <option name="skuId" value="17401285:42" data-label="(EU 42)">EU 42</option>
      <option name="skuId" value="17401284:42.5" data-label="(EU 42.5)">EU 42.5</option>
      <option name="skuId" value="17401283:43" data-label="(EU 43)">EU 43</option>
      <option name="skuId" value="17401282:44" data-label="(EU 44)">EU 44</option>
      <option name="skuId" value="17401281:44.5" data-label="(EU 44.5)">EU 44.5</option>
      <option name="skuId" value="17401280:45" data-label="(EU 45)">EU 45</option>
      <option name="skuId" value="17401279:45.5" data-label="(EU 45.5)">EU 45.5</option>
      <option name="skuId" value="17401295:46" data-label="(EU 46)">EU 46</option>
      <option name="skuId" value="17401294:47" data-label="(EU 47)">EU 47</option>
      <option class="exp-pdp-size-not-in-stock selectBox-disabled" name="skuId" value="17401293:47.5" data-label="(EU 47.5)">EU 47.5</option>
</select>

【问题讨论】:

  • 代替 count(@class)=0 尝试 not(@class)。应该可以工作(我还没有测试过,但这就是我要写的)。
  • 感谢@PrathameshSarang 的回复,但没有奏效。我试了很多次。
  • 你能分享一下你是如何得到回复的吗,我已经尝试过你的 html 到我的本地文件,它适用于response.xpath("//select/option[not(@class)]/text()")
  • 尊敬的 @Tiny.D 先生,当我使用 extract() 时,它会给出所有值。如果我不使用 extract 那么它只给出我需要的值。 response.xpath("//select/option[not(@class)]/text()").extract()
  • 所以response.xpath("//select/option[not(@class)]/text()") 为您工作?

标签: python html css xpath scrapy-spider


【解决方案1】:

你可以尝试不带attr class的选项过滤,url地址内容有另一个select和不带class的选项,文本也是47.5,所以你喜欢最后一个是47.5,你可以用select @987654325过滤@像这样:

response.xpath("//select[@name='skuAndSize']/option[not(@class)]/text()").extract()

输出:

【讨论】:

  • 先生,非常感谢您的关注。请你告诉我我只是在第二个参数中使用soup = BeautifulSoup(html_doc, '?') 我不知道我会使用什么。 lxml、html.parser 等 不工作。
  • 如果答案是解决方案,请将其标记为接受答案。通常 lxml, html.parser 是 bs4 使用的基本两个解析器,应该可以工作。
  • 你的html_doc是什么?
  • from bs4 import BeautifulSoup 在 cmd 行中不工作。我将如何使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多