python - 从特定 channel 抓取 YouTube 视频并进行搜索?

标签 python web-scraping beautifulsoup youtube

我正在使用此代码来获取 youtube channel 的网址,它工作正常,但我想添加一个选项来搜索 channel 中具有特定标题的视频。并获取您使用搜索词组找到的第一个视频的网址

from bs4 import BeautifulSoup
import requests

url="https://www.youtube.com/feeds/videos.xml?user=LinusTechTips"
html = requests.get(url)
soup = BeautifulSoup(html.text, "lxml")

for entry in soup.find_all("entry"):
    for link in entry.find_all("link"):
        print(link["href"])

最佳答案

在我的最后一个答案中,您将获得给定 youtube channel 中的所有视频标题,如您所愿
但是在我们之间的评论中,你告诉我你想通过 cronjob 运行脚本,这需要更多的努力,所以我添加了另一个答案。

from bs4 import BeautifulSoup
from lxml import etree
import urllib
import requests
import sys

def fetch_titles(url):
    video_titles = []
    html = requests.get(url)
    soup = BeautifulSoup(html.text, "lxml")
    for entry in soup.find_all("entry"):
        for link in entry.find_all("link"):
            youtube = etree.HTML(urllib.request.urlopen(link["href"]).read()) 
            video_title = youtube.xpath("//span[@id='eow-title']/@title") 
            if len(video_title)>0:
                video_titles.append({"title":video_title[0], "url":link.attrs["href"]})
    return video_titles

def main():
    if sys.argv.__len__() == 1:
        print("Error: You should specifying keyword")
        print("eg: python3 ./main.py KEYWORD")
        return

    url="https://www.youtube.com/feeds/videos.xml?user=LinusTechTips"
    keyword = sys.argv[1]

    video_titles = fetch_titles(url)
    for video in video_titles:
        if video["title"].__contains__(keyword):
            print(video["url"])
            break # add this line, if you want to print the first match only


if __name__ == "__main__":
    main()

当您通过终端调用脚本时,您应该指定关键字,如下所示:
$ python3 ./main.py Mac
其中 Mac 是关键字,main.py 是 python 脚本文件名

输出:
https://www.youtube.com/watch?v=l_IHSRPVqwQ

关于python - 从特定 channel 抓取 YouTube 视频并进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62381342/

相关文章:

python - 更改 Django-Mezzanine-Cartridge From - 下订单后的电子邮件

python - 如何在 python 中使用 selenium 将整个文本发送到文本区域而不是逐行发送?

python - 在 driver.execute_script() 中使用伪选择器时无法将某些元素滚动到 View 中

csv - 如何将结果输出到 Go 中并发网络抓取工具的 CSV 文件?

python - 仅解析 div 类 python 中的文本

Python - Web 抓取 HTML 表并打印到 CSV

python - 如何使用 BeautifulSoup 登录亚马逊

python - 安装 python 模块时出错 - pyzipcode、sqlite3

python - 在嵌套列表中查找匹配项

jquery - Scrapy 中是否有更好的 XPath 选择器替代方案?