Почему этот код Beautiful Soup не анализирует текст, на который я нацелен?

Я пытаюсь выбрать заголовок раздела «Свойства» в этой заявке размером 10 КБ; и после выбора оттуда я намереваюсь захватить текст в этом разделе (то есть весь текст между заголовками разделов «Свойства» и «Юридические разбирательства».

Когда я запускаю приведенный ниже код, я получаю IndexError «индекс списка вне диапазона», но я не понимаю, почему, поскольку текст PROPERTIES кажется внутри тега «p». Я также пытался использовать «id=ITEM_2_PROPERTIES» вместо text=, но это тоже не сработало.

Где я ошибаюсь?

import requests
from bs4 import BeautifulSoup


url = 'https://www.sec.gov/ix?doc=/Archives/edgar/data/1318605/000156459020004475/tsla-10k_20191231.htm'
soup = BeautifulSoup(requests.get(url).content, 'lxml')

properties_header = soup.find_all('p', text="PROPERTIES")[0]

print(properties_header)

person cfadr2021    schedule 20.10.2020    source источник


Ответы (1)


Это потому, что вы делаете запрос к JS отрендеренному сайту, поэтому такого p с текстом PROPERTIES нет.

Однако, если вы измените целевой URL-адрес, есть один:

import requests
from bs4 import BeautifulSoup


url = 'https://www.sec.gov/Archives/edgar/data/1318605/000156459020004475/tsla-10k_20191231.htm'
soup = BeautifulSoup(requests.get(url).content, 'lxml')

properties_header = soup.find_all('p', text="PROPERTIES")

print(properties_header)

Выход:

[<p id="ITEM_2_PROPERTIES" style="margin-bottom:0pt;margin-top:0pt;font-weight:bold;font-style:normal;text-transform:none;font-variant: normal;font-family:Times New Roman;font-size:10pt;">PROPERTIES</p>]

Я получил новый целевой URL-адрес из инструмента разработчика. Это появляется, когда вы снова включаете JS. Итак, я думаю, вам следует ориентироваться на этот URL-адрес для ваших будущих запросов.

person baduker    schedule 20.10.2020