Как получить название xlink: href / svg id с помощью scrapy? - PullRequest
0 голосов
/ 01 декабря 2018

Я совершенно новичок в области скрапинга и только вчера начал им пользоваться.Есть страница с оценками продуктов, которые я хочу получить.К сожалению, рейтинги не тексты, а звезды.Допустим, у продукта есть две звезды, он выглядит следующим образом:

<div class="index-classRating">
  <div class="index-classIcon index-red">
    <svg viewBox="0 0 32 32">
      <use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
        #shadow-root (closed)
          <svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
            <path d="1 2 3"></path>
          </svg>
      </use>
    </svg>
  </div>
  <div class="index-classIcon index-red">
    <svg viewBox="0 0 32 32">
      <use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
        #shadow-root (closed)
          <svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
            <path d="1 2 3"></path>
          </svg>
      </use>
    </svg>
  </div>

Итак, я хочу посчитать, сколько звезд "ака" /static/media/icons.f88ec073.svg#wci-starrating-full "или"wci-starrating-full" здесь.

Итак, я попытался

stars = response.xpath('//div[@class="index-classIcon index_red"]/svg[@viewBox="0 0 32 32"]/use[@xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full"]/svg/@id').extract()

и получил пустой список.Но я хочу что-то вроде

stars = ["wci-starrating-full","wci-starrating-full"]

1 Ответ

0 голосов
/ 01 декабря 2018

viewbox должен быть написан строчными буквами, "index_red" имеет тире, а не дефис try

stars=response.xpath('//div[@class="index-classIcon index-red"]/svg[@viewbox="0 0 32 32"]/use/svg/@id').extract()

Всего пример: (пожалуйста, скопируйте и вставьте в python)

import scrapy
response=scrapy.http.HtmlResponse(url='just_a_string',encoding='utf-8',body=u'''
<div class="index-classRating">
  <div class="index-classIcon index-red">
    <svg viewBox="0 0 32 32">
      <use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
        #shadow-root (closed)
          <svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
            <path d="1 2 3"></path>
          </svg>
      </use>
    </svg>
  </div>
  <div class="index-classIcon index-red">
    <svg viewBox="0 0 32 32">
      <use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
        #shadow-root (closed)
          <svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
            <path d="1 2 3"></path>
          </svg>
      </use>
    </svg>
  </div>
''')
stars=response.xpath('//div[@class="index-classIcon index-red"]/svg[@viewbox="0 0 32 32"]/use/svg/@id').extract()
print(repr(stars))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...