Python:Beautifulsoup返回None或[]

Python:Beautifulsoup返回None或[],python,web,web-scraping,beautifulsoup,python-requests,Python,Web,Web Scraping,Beautifulsoup,Python Requests,你好,我正在练习我的请求和网络抓取技能,所以我试图抓取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_

你好,我正在练习我的请求和网络抓取技能,所以我试图抓取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)

而且它返回[],我不明白为什么它返回[]当它在源代码中时,

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


我的打赌是否定的,youtube.com是一个严重依赖javascript的网站,但是
requests
模块没有js引擎。您的浏览器看到的通常不是像
这样的模块所看到的请求

您可能需要像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()

网络的发展是因为它变得越来越难以理解。大多数情况下,“现代”网页不再由服务器生成,因为用户将看到它们;相反,脚本的glob被发送给用户,基本上注入了任何东西\_(ツ)_/进入DOM

这就是为什么您需要将Selenium绑定与成熟的浏览器一起使用,正如上面QHarr提到的


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

有没有其他方法来代替selenium?比如更像请求的方式?您可以添加无头参数以避免出现浏览器我如何判断站点是否使用javascript而不是html?您可以在浏览器中关闭JavsScript并将响应与js enabledIf进行比较,当您与页面交互时,页面也会更新。是否有其他方法代替selenium?是否有其他方法代替selenium?是否有其他方法代替selenium?是否有其他方法代替selenium?是否有其他方法代替selenium?是否有其他方法代替selenium?Python有一个库,因此可能有一个替代selenium的方法,但它最终可能会做几乎相同的事情:要么模拟一个成熟的浏览器,要么控制一个成熟的浏览器。幸运的是,有一种使用Selenium的方法,浏览器是“无头的”,这意味着它实际上不会侵入操作系统中的GUI,也就是说,你不必有一个弹出窗口。已经有一段时间了,但我认为我上次使用它的方式是使用一个专门构建的Chromium版本。我如何判断一个站点是否使用javascript而不仅仅是html,这是一个很难回答的问题,因为实际上没有办法直接观察它。我想说,作为一个粗略的指南,如果像Python这样的库请求不起作用,你可能可以推断出一个网站是否在“使用Javascript”(以(SPA)的方式)。你还可以寻找其他迹象:如果网站似乎以零碎的方式加载(在Youtube上尤其明显),或者,在浏览器的Web Inspector中,如果index.html似乎没有包含太多内容,并且引用了一个大的JS包。正如下面所有的答案中所提到的,内容是动态的,不能通过
请求来检索它。通常,我们可以对JavaScript代码进行反向工程,但通常不值得付出努力,而且非常简单更易于使用
selenium