Python BeautifulSoup не удается найти теги на определенных уровнях

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

Я пытался извлечь названия веб-сайтов и ссылки на фотографии из этой ссылки

Я использовал коды ниже

 webpage = requests.get(url)
page = bs(webpage.content, "html.parser")
content = webpage.find("div", {"class":"end__viewer_container"})
 

Однако, когда я пытаюсь извлечь содержимое html, я могу печатать только до уровня

 <div id="cont" class= "end __viewer_container" role= "main" style="padding-top: 43px;">
 

Для всего, что находится внутри / под ним, например

 title = webpage.find("h3", {"class":"se_textarea"}

photo_link = webpage.find("div", {"class":"se_viewArea"})
 

Когда я пытаюсь его найти, Python возвращает только «None», я не смог ничего извлечь на этом уровне

Когда я пытаюсь напечатать

 content = webpage.find("div", {"class":"end __viewer_container"})
 

Я могу видеть элементы, которые я хочу найти, но не могу извлечь.

Кроме того, я подозреваю, что под ним есть скрипт

 <div class="end __viewer_container" id="cont" role="main">
<!-- 컨텐츠 내용 {{ -->
<script id="__clipContent" type="x-clip-content">
    <div id="SEDOC-1613466923574--228885683" class="se_doc_viewer se_body_wrap se_theme_default " 
      data-docversion="1.0">
 

Мне интересно, вызывает ли этот скрипт то, что я не могу извлечь что-либо внутри / под ним.

Или есть какие-либо другие способы извлечения ссылок на заголовок и фотографии?

Спасибо

Комментарии:

1. Это проблема с рендерингом клиента? Может быть, то, что видит BS, не отображается полностью?

2. Когда я печатаю content = webpage.find(«div», {«class»:»end __viewer_container»}), я могу видеть эти элементы, поэтому, я думаю, это может быть не проблема с рендерингом.

Ответ №1:

они помещают html в тег script <script type="x-clip-content" id="__clipContent">... , поэтому вы не можете выбрать элемент.

решение состоит в том, чтобы получить innerHTML внутри #__clipContent , а затем повторно проанализировать с помощью BeautifulSoup

 webpage = requests.get(url)
soup = BeautifulSoup(webpage.text, 'html.parser')
clipContent = soup.select_one('#__clipContent')
innerHTML = clipContent.decode_contents()

newSoup = BeautifulSoup(innerHTML , 'html.parser') 
title = newSoup.select_one("h3.se_textarea")
photo_links = newSoup.select("div.se_viewArea img")

print('Title: ', title.text.strip())
for img in photo_links:
    print(img['data-src'])
 

Комментарии:

1. пожалуйста, не забудьте отметить ответ как принятый.