Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用BeautifulSoup抓取新的YouTube视频_Python_Python 3.x_Web Scraping_Beautifulsoup_Youtube - Fatal编程技术网

Python 用BeautifulSoup抓取新的YouTube视频

Python 用BeautifulSoup抓取新的YouTube视频,python,python-3.x,web-scraping,beautifulsoup,youtube,Python,Python 3.x,Web Scraping,Beautifulsoup,Youtube,我是python新手,我想进入YouTube上的网页抓取。 我想用这个链接上传最新的视频:'https://www.youtube.com/results?search_query=programming&sp=CAISBAgBEAE%253D我还想抓拍新的5部视频。我该怎么做? 我已经使用这段代码来测试它(我只想要链接) 编辑:我没有从python终端得到任何响应。它没有刮任何东西。它只有默认的“>>>”如果不使用Googles YouTube API密钥,您就无法抓取YouTube,您可以通

我是python新手,我想进入YouTube上的网页抓取。 我想用这个链接上传最新的视频:'https://www.youtube.com/results?search_query=programming&sp=CAISBAgBEAE%253D我还想抓拍新的5部视频。我该怎么做? 我已经使用这段代码来测试它(我只想要链接)


编辑:我没有从python终端得到任何响应。它没有刮任何东西。它只有默认的“>>>”

如果不使用Googles YouTube API密钥,您就无法抓取YouTube,您可以通过这样做来获取该密钥。如果你还想试试的话,我可以给你一个合法的答案

同时,尝试在这个网站上使用beautifulsoup来练习解析

这里有一些代码可以帮助您开始

def get_source(url):
    return BeautifulSoup(requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, verify=False).text, 'html.parser')

soup = get_source('http://videvo.net')

for tags in soup.find_all('a'):
   print(tags['href'])
快乐编码

编辑 我(稍微)站直了。无法解析Youtube的主url。你可以试试这个代码

def get_source(url):
    return BeautifulSoup(requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, verify=False).text, 'html.parser')

soup = get_source('https://www.youtube.com/feeds/videos.xml?user=kinagrannis')

for entry in soup.find_all("entry"):
   for title in entry.find_all("title"):
      print(title.text)
   for link in entry.find_all("link"):
      print(link["href"])
   for name in entry.find_all("name"):
      print(name.text)
   for pub in entry.find_all("published"):
      print(pub.text)
注意:您可以输入任何用户名而不是“kinnagrannis”,user=[用户名]

您可以这样做:

  • 使用
    请求HTML
    库或
    selenium
  • 使用
    regex
  • 使用YouTube搜索引擎结果API从
代码(仅仅给出一个想法是非常基本的)

输出:

https://www.youtube.com/watch?v=OUnxJk3Bphk
https://www.youtube.com/watch?v=vWvtt1ESNeY
https://www.youtube.com/watch?v=b8OIZu5y_Ak
https://www.youtube.com/watch?v=xp3fHaT2_VE
https://www.youtube.com/watch?v=e9toQAcjOrw
https://www.youtube.com/watch?v=em0Is0nyaXA
https://www.youtube.com/watch?v=N5JVTUAGmAM
https://www.youtube.com/watch?v=a0hQG-UdhYc
https://www.youtube.com/watch?v=SmQFxQ1fa2o
https://www.youtube.com/watch?v=uuMS1FYLgWQ
https://www.youtube.com/watch?v=8WJ-zSE32ZY
https://www.youtube.com/watch?v=c5MtH-xDspg
https://www.youtube.com/watch?v=5Xktqz6VUTU
https://www.youtube.com/watch?v=Wbo6j_iq2XY
https://www.youtube.com/watch?v=8eu9nliySO4
https://www.youtube.com/watch?v=j28PjOy_uk8
https://www.youtube.com/watch?v=fM2Ordt8Q9E
https://www.youtube.com/watch?v=tFSkaIVyNno
https://www.youtube.com/watch?v=1hDXlc2C3Rw
https://www.youtube.com/watch?v=vH9_Eo7VW3c

使用不带无头浏览器的
regex

您需要访问
var ytInitialData
元素,然后在
“commandMetadata”
中找到视频的URL
{“URL”:“/watch?v=Ae2TRkpjRCc”,…..

这里是一个起点,它将获取上的所有内部
var ytInitialData


或者,您也可以从SerpApi使用

要集成的代码:

from serpapi import GoogleSearch

params = {
  "engine": "youtube",
  "search_query": "programming",
  "sp": "CAISBAgBEAE%253D",
  "api_key": "your_secret_api_key"
}

search = GoogleSearch(params)
results = search.get_dict()

for link in results['video_results']:
    print(f"Title: {link['title']}\nLink: {link['link']}\n")
输出:

Title:ClassVIII基本HTML标记和编程15 4 101`
链接:https://www.youtube.com/watch?v=KIPp63tXKpU
标题:c编程中的For循环#BSSDEClasses
链接:https://www.youtube.com/watch?v=nfRN0x9VvQc
标题:[C#]编程NatsukiBot
链接:https://www.youtube.com/watch?v=chnigx-ezwg
标题:CS201简短讲座-03 | VU简短讲座|编程入门(乌尔都语/印地语)
链接:https://www.youtube.com/watch?v=qoxXJchd7N4
标题:C语言编程-While语句
链接:https://www.youtube.com/watch?v=cl0OpNCdF5I
标题:html和基本编程简介
链接:https://www.youtube.com/watch?v=A4We3NGqxuA
标题:Printf和Scanf函数的使用|第7部分| C编程| PadhoChalo
链接:https://www.youtube.com/watch?v=578xS-Ugc2c
题目:C++课程已经开始了计算机编程
链接:https://www.youtube.com/watch?v=SjFgTK2HqbE
标题:三菱欧蓝德2008 prox/twist转发器钥匙编程提示
链接:https://www.youtube.com/watch?v=HlSJcBwxKFQ
标题:计算机编程1-课程简介
链接:https://www.youtube.com/watch?v=xdmPbhTT01g
标题:Python中的编程、数据结构和算法
链接:https://www.youtube.com/watch?v=0fUddu9cdAU
免责声明,我为SerpApi工作


寻求调试帮助的问题(“此代码为什么不工作?”)应包括所需的行为、特定的问题或错误以及将其复制为格式化文本(而不是图像)所需的最短代码在问题本身中。没有明确问题陈述的问题对其他读者没有用处。请参阅:。我认为您的主要问题是没有将Header={“User Agent”:“Mozilla/5.0”}作为标题传递。这有助于克服一些障碍。
from requests_html import HTMLSession

session = HTMLSession()
url = "https://www.youtube.com/results?search_query=programming&sp=CAISBAgBEAE%253D"
response = session.get(url)
response.html.render(sleep=1, keep_page = True, scrolldown = 2)

for links in response.html.find('a#video-title'):
    link = next(iter(links.absolute_links))
    print(link)
from serpapi import GoogleSearch

params = {
  "engine": "youtube",
  "search_query": "programming",
  "sp": "CAISBAgBEAE%253D",
  "api_key": "your_secret_api_key"
}

search = GoogleSearch(params)
results = search.get_dict()

for link in results['video_results']:
    print(f"Title: {link['title']}\nLink: {link['link']}\n")