#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. пожалуйста, не забудьте отметить ответ как принятый.