Python:Beautifulsoup返回无或[]

时间:2018-12-30 19:47:24

标签: python web web-scraping beautifulsoup python-requests

您好,我正在练习我的请求和网络抓取技能,所以我试图在youtube上抓取趋势页面,并拉动趋势视频的标题,此链接为youtube

这是我正在运行的代码

import requests
from bs4 import BeautifulSoup

url = 'https://www.youtube.com/feed/trending'
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")
a = soup.find_all("a", {"id": "video-title"})
print(a)

及其返回的[],我不明白为什么在源代码中返回它的[]

3 个答案:

答案 0 :(得分:2)

打印变量html.content的内容-它是否包含该ID?

我敢打赌,youtube.com是一个高度依赖JavaScript的网站,但是requests模块没有js引擎。您的浏览器通常不会看到requests之类的模块。

答案 1 :(得分:2)

您可能需要诸如selenium之类的方法,该方法需要时间才能完全渲染页面。以下目前产生70个标题。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = 'https://www.youtube.com/feed/trending'

d = webdriver.Chrome()
d.get(url)
titles = [title.text for title in WebDriverWait(d,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#video-title")))]
print(titles)
d.quit()

答案 2 :(得分:2)

网络日新月异,它变得越来越难以理解。在大多数情况下,服务器不再生成“现代”网页,因为用户会看到它们。相反,脚本群正在被发送给用户,并且基本上将任何\ _(ツ)_ /¯注入到DOM中。

这就是为什么如上所述,您需要在功能完善的浏览器中使用Selenium绑定。

我很抱歉没有对此发表评论,但显然我需要50分才能做到这一点。