如何用 Beautiful Soup 抓取 youtube 视频描述
How to scrape youtube video description with Beautiful Soup
我正在尝试通过网络抓取 YouTube 视频列表,并且我想收集每个视频的 YouTube 说明。但是,我没有成功,也不明白为什么会这样。任何帮助深表感谢。 (有问题的 YouTube 视频:https://www.youtube.com/watch?v=57Tjvv_pCXg&t=55s)
element_titles = driver.find_elements_by_id("video-title")
result = requests.get(element_titles[1].get_attribute("href"))
soup = BeautifulSoup(result.content)
description = str(soup.find("div", {"class": "style-scope yt-formatted-string"}))
描述的结果是None
备注
我知道有一个 Youtube API 但是你必须支付一个 API 密钥并且这样做不符合我的利益
要提取描述,您可以同时使用 selenium 或 beautifulsoup。后者更快,这里是代码
import re
soup = BeautifulSoup(requests.get('https://www.youtube.com/watch?v=57Tjvv_pCXg').content)
pattern = re.compile('(?<=shortDescription":").*(?=","isCrawlable)')
description = pattern.findall(str(soup))[0].replace('\n','\n')
print(description)
如果您 运行 print(soup.prettify())
并查找视频描述的一部分,比如 know this is just my
,您会看到完整的描述在一个大 json 中结构
...,"isOwnerViewing":false,"shortDescription":"Listen: https://quellechris360.bandcamp.com/album/deathfame\n\nQuelle Chris delivers what might be his most challengi...bla bla...ABSTRACT HIP HOP\n\n7/10\n\nY'all know this is just my opinion, right?","isCrawlable":true,"thumbnail":{...
特别是描述包含在shortDescription":"
和","isCrawlable
之间,所以我们可以使用正则表达式来提取这两个字符串之间包含的子字符串。查找两个字符串之间包含的每个字符 (.*
) 的正则表达式命令是 (?<=shortDescription":").*(?=","isCrawlable)
我正在尝试通过网络抓取 YouTube 视频列表,并且我想收集每个视频的 YouTube 说明。但是,我没有成功,也不明白为什么会这样。任何帮助深表感谢。 (有问题的 YouTube 视频:https://www.youtube.com/watch?v=57Tjvv_pCXg&t=55s)
element_titles = driver.find_elements_by_id("video-title")
result = requests.get(element_titles[1].get_attribute("href"))
soup = BeautifulSoup(result.content)
description = str(soup.find("div", {"class": "style-scope yt-formatted-string"}))
描述的结果是None
备注 我知道有一个 Youtube API 但是你必须支付一个 API 密钥并且这样做不符合我的利益
要提取描述,您可以同时使用 selenium 或 beautifulsoup。后者更快,这里是代码
import re
soup = BeautifulSoup(requests.get('https://www.youtube.com/watch?v=57Tjvv_pCXg').content)
pattern = re.compile('(?<=shortDescription":").*(?=","isCrawlable)')
description = pattern.findall(str(soup))[0].replace('\n','\n')
print(description)
如果您 运行 print(soup.prettify())
并查找视频描述的一部分,比如 know this is just my
,您会看到完整的描述在一个大 json 中结构
...,"isOwnerViewing":false,"shortDescription":"Listen: https://quellechris360.bandcamp.com/album/deathfame\n\nQuelle Chris delivers what might be his most challengi...bla bla...ABSTRACT HIP HOP\n\n7/10\n\nY'all know this is just my opinion, right?","isCrawlable":true,"thumbnail":{...
特别是描述包含在shortDescription":"
和","isCrawlable
之间,所以我们可以使用正则表达式来提取这两个字符串之间包含的子字符串。查找两个字符串之间包含的每个字符 (.*
) 的正则表达式命令是 (?<=shortDescription":").*(?=","isCrawlable)