如何解决如何使用XPath获取YouTube标题
以下代码未获得YouTube标题。它曾经工作过。怎么了?
from lxml import etree
def get_youtube_title(youtube_id):
youtube_watch_url = 'http://www.youtube.com/watch?v='
youtube_watch_url += youtube_id
youtube = etree.HTML(urllib.request.urlopen(youtube_watch_url).read().decode('utf-8'))
#video_title = youtube.xpath("//span[@id='eow-title']/@title") # old youtube? Worked before. Not work recently.
video_title = youtube.xpath('//*[@id="container"]/h1/yt-formatted-string') # xpath copied from Inspect menu "copy | copy xpath" by right click tile in html.
return ''.join(video_title)
print(get_youtube_title('2wEA8nuThj8'))
结果为空。
解决方法
yt-formatted-string
元素是由JS添加的,因此您不能从源代码中提取其文本。
尝试从meta
节点中提取标题:
video_title = youtube.xpath('//meta[@name="title"]/@content')
,
与其让东西依赖于可能随时间变化的东西,例如css类或其他随时间变化的id,请从<title>
中提取标题
from urllib import request
from lxml import etree
def get_youtube_title(youtube_id):
youtube_watch_url = 'https://www.youtube.com/watch?v='
youtube_watch_url += youtube_id
youtube = etree.HTML(request.urlopen(youtube_watch_url).read().decode('utf-8'))
return youtube.xpath("//title")[0].text if len(youtube.xpath("//title")) > 0 else "NO Title"
print(get_youtube_title('2wEA8nuThj8'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。