无法使用BeautifulSoup从源代码中获取完整的“正文”

时间:2019-04-30 09:56:06

标签: python beautifulsoup

我使用的是在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 个答案:

答案 0 :(得分:1)

正如我在评论中所说,您可以使用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标签内。您只需要在div上应用find_all方法:

for section in div.find_all('section'):
    print(section)