JSON не загружает данные должным образом - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь убрать внедренный json с веб-страницы и затем передать объект json в json.loads().Первый URL-адрес в порядке, но при загрузке второго URL-адреса возвращается ошибка

ValueError: неопределенная строка, начинающаяся с: строка 1 столбец 2078 (символ 2077)

вот код

import requests,json
from bs4 import BeautifulSoup

urls = ['https://www.autotrader.co.uk/dealers/greater-manchester/manchester/williams-landrover-9994',
'https://www.autotrader.co.uk/dealers/warwickshire/stratford-upon-avon/guy-salmon-land-rover-stratford-upon-avon-9965'
]

for url in urls:
    r = requests.get(url)
    soup = BeautifulSoup(r.content,'lxml')
    scripts = soup.find_all('script')[0]
    data = scripts.text.split("window['AT_APOLLO_STATE'] = ")[1].split(';')[0]
    jdata = json.loads(data)
    print(jdata)

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Если вы напечатаете scripts.text.split("window['AT_APOLLO_STATE'] = ")[1], вы увидите следующее, включающее ; сразу после and enthusiastic.Таким образом, вы получаете недопустимую строку json из scripts.text.split("window['AT_APOLLO_STATE'] = ")[1].split(';')[0].И данные заканчиваются на and enthusiastic, который не является допустимой json строкой.

"strapline":"In our state-of-the-art dealerships across the U.K, Sytner Group represents the world’s most prestigious car manufacturers. All of our staff are knowledgeable and enthusiastic; making every interaction special by going the extra mile.",

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

Причина была дана. Вы также можете вывести соответствующую строку

import requests,json

urls = ['https://www.autotrader.co.uk/dealers/greater-manchester/manchester/williams-landrover-9994',
'https://www.autotrader.co.uk/dealers/warwickshire/stratford-upon-avon/guy-salmon-land-rover-stratford-upon-avon-9965'
]

p = re.compile(r"window\['AT_APOLLO_STATE'\] =(.*?});", re.DOTALL)
for url in urls:
    r = requests.get(url)
    jdata = json.loads(p.findall(r.text)[0])
    print(jdata)

Пропущено } в исходном сообщении.

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