Вы можете очистить предварительно загруженные данные из тега скрипта и проанализировать библиотеку json. Первый блок кода возвращает немного больше контента, чем вы хотели.
Вы можете еще больше ограничиться, просматривая идентификаторы абзацев внутри тела и используя их для фильтрации содержимого, , как показано в нижнем блоке ;Затем вы получите именно то содержание статьи, которое вы описываете.
import requests, re, json
r = requests.get('https://www.nytimes.com/2019/10/24/opinion/chuck-schumer-electric-car.html?action=click&module=Opinion&pgtype=Homepage')
p = re.compile(r'window\.__preloadedData = (.*})')
data = json.loads(p.findall(r.text)[0])
for k,v in data['initialState'].items():
if k.startswith('$Article') and 'formats' in v:
print(v['text@stripHtml'] if 'text@stripHtml' in v else v['text'])
Вы можете изучить json здесь: https://jsoneditoronline.org/?id=f9ae1fb774af439d8e9b32247db9d853
Ниже показано, как использовать дополнительную логику для ограничения довыход вы хотите:
ids = []
for k,v in data['initialState'].items():
if k.startswith('$Article') and v['__typename'] == 'ParagraphBlock' and 'content' in v:
ids += [v['content'][0]['id']]
for k,v in data['initialState'].items():
if k in ids:
print(v['text'])