Найти звездный рейтинг - PullRequest
0 голосов
/ 09 мая 2020

На этой странице я пытаюсь найти звездный рейтинг.

В оболочке scrapy:

len(response.css('#info-panel .selected'))

len(response.css('#info-panel').xpath('//*[has-class("star selected")]'))

Но ничего не получается.

html

<div class="search-item-info" doctordetail=".1.0.0.0.1.3">
  <span doctordetail=".1.0.0.0.1.3.0">
  <span class="star-rating" title="3.92" doctordetail=".1.0.0.0.1.3.0.0">
  <span class="stars" doctordetail=".1.0.0.0.1.3.0.0.0">
  <span class="star" doctordetail=".1.0.0.0.1.3.0.0.0.$5"></span>
  <span class="star selected" doctordetail=".1.0.0.0.1.3.0.0.0.$4"></span>
  <span class="star selected" doctordetail=".1.0.0.0.1.3.0.0.0.$3"></span>
  <span class="star selected" doctordetail=".1.0.0.0.1.3.0.0.0.$2"></span>
  <span class="star selected" doctordetail=".1.0.0.0.1.3.0.0.0.$1"></span></span>
  </span>
  <div class="star-rating-count" doctordetail=".1.0.0.0.1.3.0.1">
    <span doctordetail=".1.0.0.0.1.3.0.1.0">
    <span itemprop="ratingCount" doctordetail=".1.0.0.0.1.3.0.1.0.0">28</span></span>
    <span doctordetail=".1.0.0.0.1.3.0.1.1"> reviews</span></div>
  </span>
</div>

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Попробуйте это

response.css(".star-rating::attr(title)").get()
0 голосов
/ 09 мая 2020

Возможно, вы получите ошибку 403 (приводящую к пустому ответу), поскольку веб-сайт использует защиту Cloudfare. Тогда вам, вероятно, следует использовать https://github.com/Anorov/cloudflare-scrape, чтобы обойти его.

Если это не так, вы можете использовать одно из следующих выражений XPath, чтобы получить свой звездный рейтинг:

count(//h1/following::span[@class="stars"][1]//span[@class="star selected"])

Вывод: 4

Точнее:

substring-before(substring-after(//script[contains(@type,"json")],'"ratingValue": "'),'"')

Вывод: 3.9

...