Saya mencoba mengekstrak teks

60 Hari dari situs web A https://www.vitalsource.com/products/abnormal- psikologi-susan-nolen-hoeksema-v9781259765667

Akses Seumur Hidup dari situs web B https://www.vitalsource.com/products/teaming- with-nutrients-jeff-lowenfels-v9781604695175

Saya mencoba menggunakan abs xpath, keduanya tidak menghasilkan apa-apa.

Untuk sebuah

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

Untuk B

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

Atau jalur css

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

Saya percaya teks yang ingin saya ekstrak tidak dihasilkan oleh javascript. jadi saya tidak tahu apa-apa lagi yang bisa saya lakukan untuk memecahkan masalah ini.

Tolong bantu!

Terima kasih sebelumnya.

0
Cong Luo 2 Juni 2019, 20:35

2 jawaban

Jawaban Terbaik

Informasi yang Anda butuhkan diberikan oleh Javascript, tetapi juga tersedia dalam format JSON di dalam halaman. Yang perlu Anda lakukan adalah memilih elemen yang berisi data, mengurai data menggunakan JSON lib dan mengakses bidang yang diinginkan.

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',      

Jadi, Anda dapat mengaksesnya secara normal:

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

Penting untuk dicatat bahwa situs ini memiliki beberapa varian untuk setiap produk, dan ada lebih banyak bidang dengan string yang sama ini. Anda harus memahami bagaimana situs ini mengatur produk untuk mendapatkan data yang benar, tetapi pendekatan ini seharusnya cukup untuk mengakses semua informasi yang Anda butuhkan.

1
Marcos 2 Juni 2019, 23:03

Sayangnya, ini dihasilkan oleh javascript. Jadi, Anda perlu menggunakan sesuatu seperti selenium untuk kemungkinan besar ini.

0
Aero Blue 2 Juni 2019, 17:46