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.
2 jawaban
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.
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.
Sayangnya, ini dihasilkan oleh javascript. Jadi, Anda perlu menggunakan sesuatu seperti selenium
untuk kemungkinan besar ini.