Не удается получить полное "тело" из исходного кода с помощью BeautifulSoup - PullRequest
0 голосов
/ 30 апреля 2019

Я использую пример кода, который я нашел здесь на Stackoverflow В частности, я использую часть предложенного кода из второго наиболее проголосовавшего ответа.Код следующий:

import urllib
from bs4 import BeautifulSoup

url = "https://www.dailymotion.com/search/1234"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
print(soup.find('body'))

Как вы, возможно, заметили, я звоню на dailymotion.com, где хочу проанализировать результаты поиска для некоторого случайного текста "1234".

Так выглядит браузернапример, когда я его открываю: Picture

Когда я нажимаю F12 и анализирую исходный код, особенно часть тела, я замечаю, что есть разница.Picture2

В то время как мой вывод из кода Python выглядит следующим образом:

<body>\n<div id="root"></div>\n<!-- Google Analytics -->\n\n<!-- End Google Analytics -->\n\n\n\n<!-- pv5template --><!-- Mon Apr 29 2019 14:40:17 GMT+0200 (CEST) --><!-- b465253ce32a2c1e664af00ed756d25b830c890a --><!-- v-0.0.1770-rc2 --><link as="script" href="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js" rel="preload"/><link as="script" href="https://static1.dmcdn.net/playerv5/dmp.manifest.7fbdfdd01f6244e8feb4.es5.js" rel="preload"/><link as="script" href="https://static1.dmcdn.net/playerv5/dmp.vendor.6dc443eed0ba7568dbab.es5.js" rel="preload"/><link as="script" href="https://static1.dmcdn.net/playerv5/dmp.main.cbf70e2a7d9818475b7b.es5.js" rel="preload"/><link as="script" href="https://static1.dmcdn.net/playerv5/dmp.theme_neon.f7b007935e44806b2e97.es5.js" rel="preload"/><link href="https://dmxleo.dailymotion.com" rel="preconnect"/><link href="https://pebed.dm-event.net" rel="preconnect"/><link crossorigin="anonymous" href="https://static1.dmcdn.net" rel="preconnect"/><link href="https://graphql.api.dailymotion.com" rel="preconnect"/>\n\n \n\n<!-- Google Tag Manager (noscript) -->\n<noscript><iframe height="0" src="https://www.googletagmanager.com/ns.html?id=GTM-P8L2J6G&amp;gtm_auth=-_fJL9BsWrxKWr76EuFTEA&amp;gtm_preview=env-5&amp;gtm_cookies_win=x" style="display:none;visibility:hidden" width="0"></iframe></noscript>\n<!-- End Google Tag Manager (noscript) -->\n</body>

Важное отличие заключается в самом начале.Похоже, что он не дает мне содержимое id = "root" .Поскольку моя цель состоит в том, чтобы проанализировать содержимое элементов в «корне», я должен спросить, есть ли способ получить эту часть кода?

1 Ответ

1 голос
/ 30 апреля 2019

Как я уже сказал в комментарии, вы можете получить содержимое div id=root, используя пакет selenium.

Вот фрагмент кода, который получает div

from selenium import webdriver
from bs4 import BeautifulSoup

browser=webdriver.Firefox()
browser.get('https://www.dailymotion.com/search/1234')

soup=BeautifulSoup(browser.page_source)


div = soup.find('div', {'id':'root'})
print(div)

Тогда другая карта находится внутри тега section.Вам просто нужно применить метод find_all к вашему div:

for section in div.find_all('section'):
    print(section)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...