Scrap, скребущий текст в теге HTML, когда нет кавычек? - PullRequest
0 голосов
/ 26 апреля 2018

ОБНОВЛЕНИЕ: это число 48 отображается в «Проверка» в Chrome, но не в «Просмотр источника страницы». Теперь понимаю, что это генерируется JavaScript, и поэтому я не могу его извлечь.

Это часть HTML, которую я пытаюсь очистить

<span class="value">
     <span class="base-entity-display-count">48</span> 
     "times"
</span>

Проблема в том, что я не могу получить этот номер 48.
Я думаю, что проблема в том, что вокруг 48 нет "".
Потому что я могу получить «временные» тексты без проблем, и единственное отличие, которое я вижу, это то, что около 48 »нет.

Это код, который работает для «раз»:

response.xpath('.//span[@class="value"]/text()').extract_first()
>>> u'<span class="value"><span class="base-entity-display-count"></span>times</span>'

Для 48:

response.xpath('.//span[@class="base-entity-display-count"]').extract_first()
>>> u'<span class="base-entity-display-count"></span>'

Как видите, 48 отсутствует.

У кого-нибудь есть какое-то решение или идея?

1 Ответ

0 голосов
/ 27 апреля 2018

Если вы посмотрите на тело страницы и поищите свой номер, вы увидите, что есть какой-то встроенный json. enter image description here

Для решения этой проблемы вы можете:

  1. найти код JSON с регулярным выражением:

    import re
    # select everything between "ap.boot.push(" and ");"
    data = re.findall('app.boot.push\((\{.+?\})\);', response.body_as_unicode())
    
  2. загрузите json и проанализируйте его с помощью python, чтобы найти нужные значения:

    import json
    data = [json.loads(d) for d in data]
    for d in data:
        if d.get('name') == 'BaseEntityDetails':
            print(d['values']['displayCountText'])
    #prints: 66
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...