def url_search(self, search_string, max_search):
textToSearch = search_string
query = urllib.parse.quote(textToSearch)
url = "https://www.youtube.com/results?search_query=" + query
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'lxml')
i = 1
for vid in soup.findAll(attrs={'class':'yt-uix-tile-link'}):
if len(self.dict) < max_search:
self.dict[i] = 'https://www.youtube.com' + vid['href']
i += 1
else:
break
我正在尝试使用 BS4 从 youtube 搜索结果页面获取视频 href
我相信这个问题是 soup.findAll(attrs={'class':'yt-uix-tile-link'}):
被返回为 None。我不太确定。帮助解决这个问题,或者其他方法和想法,他将不胜感激。
答案 0 :(得分:0)
Youtube 在其页面上使用 javascript 生成大量内容,您不太可能从美丽的汤中获得您想要的内容。您将需要使用 selenium 或其他启用 javascript 的解析器。
请注意,这并不意味着 bs4 不好,它非常适合那些使用 javascript 不那么繁重并且在这些情况下比 selenium 更快的网站。
有关详细信息,请参阅:Scraping YouTube links from a webpage
答案 1 :(得分:0)
事实证明,YouTube 使用 JavaScript 生成搜索结果页面。我找到了一种使用官方 YouTube API 的替代方法,而不是使用 bs4。就我而言,使用 YouTube API 要简单得多。
有关 YouTube API 的更多信息,请参阅:https://developers.google.com/youtube/v3