Когда вы выполните data = soupdata.find('script')
, он вернет первый найденный тег скрипта.Вам нужно сделать find_all
, а затем пройтись по этим элементам, чтобы выделить тот, который вы ищете.Затем требуется манипулировать строкой, чтобы она имела формат, который может использовать json.loads()
.
import requests
import urllib.request
import urllib
from bs4 import BeautifulSoup
from csv import writer
import csv
import json
import re
url = 'https://stores.healthmart.com/athenspharmacy/stores.aspx'
response = requests.get(url)
soupdata = BeautifulSoup(response.text,'html.parser')
scripts = soupdata.find_all('script')
jsonObj = None
for script in scripts:
if 'dataLayer =' in script.text:
jsonStr = script.text
jsonStr = jsonStr.split('dataLayer = [')[1]
jsonStr = jsonStr.split('];')[0]
jsonStr = jsonStr.replace("'", '"')
jsonStr = ','.join(jsonStr.split(',')[0:-1]) + '}'
jsonObj = json.loads(jsonStr)
print (jsonObj['acct.NCPDP'], jsonObj['acct.storeId'])
Вывод:
print (jsonObj['acct.NCPDP'], jsonObj['acct.storeId'])
0140044 2068