скрап, не в состоянии найти текстовую фазу на сайте - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь извлечь текст

60 дней с веб-сайта A https://www.vitalsource.com/products/abnormal-psychology-susan-nolen-hoeksema-v9781259765667

Пожизненный доступ с веб-сайта B https://www.vitalsource.com/products/teaming-with-nutrients-jeff-lowenfels-v9781604695175

Я пытался использовать abs xpath, оба ничего не возвращали.

для A

//div[2]/div[1]/label[1] 

для B

//div[1]/span[1]/label[1] 

или css path

.u-weight--bold.type--magic9.u-inline

Я считаю, что тексты, которые я хочу извлечь, не сгенерированы javascript.поэтому я не знаю ничего другого, что я могу сделать, чтобы решить эту проблему.

Пожалуйста, помогите!

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Необходимая информация предоставляется Javascript, но она также доступна в формате JSON на странице. Все, что вам нужно сделать, это выбрать элемент, содержащий данные, проанализировать данные с помощью JSON lib и получить доступ к нужному полю.

enter image description here

import json
import pprint

data = response.xpath(
    '//div[@data-react-class="vs.CurrentRegionOnlyWarningModal"]'
    '/@data-react-props')
.extract_first()

json_data = json.loads(data)

pprint.pprint(json_data)
{'selectedVariant': None,
 'variants': [{'asset_id': 88677112,
               'created_at': '2016-10-07T14:17:10.000Z',
               'deleted_at': None,
               'distributable': True,
               'downloadable_duration': 'perpetual',
               'full_base_currency': 'USD',
               'full_base_price': '107.5',
               'full_currency': 'USD',
               'full_price': '107.5',
               'full_price_converted': False,
               'id': 476831514,
               'import_id': 'a3b99a3de0df7d0442253798cba8b8ea',
               'in_store': True,
               'item_type': 'Single',
               ....
               'online_duration': '60 days',      

Итак, вы можете получить к нему обычный доступ:

for x in json_data['variants']:
    print(x['online_duration'])

Важно отметить, что на этом сайте есть несколько вариантов для каждого продукта, и есть больше полей с этой же строкой. Вы должны понимать, как этот сайт организует продукты, чтобы получить правильные данные, но такого подхода должно быть достаточно для доступа ко всей необходимой информации.

0 голосов
/ 02 июня 2019

К сожалению, он сгенерирован javascript.Поэтому вам, скорее всего, нужно использовать что-то вроде selenium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...