您好,我正在练习我的请求和网络抓取技能,所以我试图抓取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)发布于 2018-12-31 03:51:55
打印变量html.content的内容-它是否包含该ID?
我打赌不会,youtube.com是一个严重依赖javascript的网站,但是requests模块没有js引擎。你的浏览器看到的通常不是像requests这样的模块看到的。
发布于 2018-12-31 03:57:38
你可能需要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()发布于 2018-12-31 04:04:58
网络正在退化,因为它变得越来越难以理解。在很大程度上,“现代”网页不再像用户看到的那样由服务器生成;相反,脚本的球体被发送给用户,基本上将任何¯\_(ツ)_/注入到DOM中。
这就是为什么需要在成熟的浏览器中使用Selenium绑定的原因,正如上面的QHarr所提到的。
很抱歉没有对此发表评论,但显然我需要50分才能做到这一点。
https://stackoverflow.com/questions/53980890
复制相似问题