Я создаю веб-скребок в Instagram (для практики). Я использую Selenium для работы с динамическими c веб-страницами. Я загружаю веб-страницу, используя
driver.execute_script("return document.documentElement.outerHTML")
(Это строка javascript DOM, проходящая через селен в python)
Когда я печатаю переменную, хранящую вас вывод для этой функции, я вижу тег с классом. Но после того, как я проанализировал его в BeautifulSoup (например: soup(jspage, "html.parser")
)
, а затем распечатал результат, я больше не могу найти тег и класс. Если вам нужны подробности, я с удовольствием предоставлю их, просто спросите.
Вот фрагмент кода, в котором происходит ошибка:
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a').click()
time.sleep(5)
jspage = driver.execute_script("return document.documentElement.outerHTML")
print(jspage)
page = soup(jspage, "html.parser")
print(page)
elements = page.findAll("a", {"class":"FPmhX notranslate _0imsa "})
print(elements)
for element in elements:
print(elements.text)
Переменная jspage делает включает имя класса FPmhX notranslate _0imsa
(просто чтобы уточнить, пробелы не являются опечатками, они являются частью имени класса), тогда как переменная page - нет, поэтому при выводе переменной elements возвращается пустой список. Вот ссылка на страницу (я знаю, что есть более эффективные способы сделать это, но все они ограничат меня в возможности только перелистать эту страницу) https://www.instagram.com/realdonaldtrump/following/
Если вам нужно, чтобы я опубликовал полный код, я был бы рад сделать это.
ОБНОВЛЕНИЕ 1: Я попытался использовать синтаксический анализатор lxml
вместо html.parser
для BeautifulSoup, и я получил тот же результат .
ОБНОВЛЕНИЕ 2: Я попытался изменить findAll
на find
, но я все еще не получил никакого вывода. Я думаю, что это доказывает, что проблема в этой строке: page = soup(jspage, "html.parser")
, но я не хочу, чтобы кто-то окрашивал мнение.
ОТВЕТ: Я разместил ответ ниже и приму это когда я могу