【问题标题】:Can't get href from Selenium webdriver scraping youtube无法从 Selenium webdriver 抓取 youtube 获取 href
【发布时间】:2022-11-29 05:06:49
【问题描述】:

我正在尝试通过执行下面的代码从频道中抓取 youtube 视频,但是,我的 element_titles 似乎没有 href 属性。这在大约一年前有效,我不确定为什么现在不起作用? youtube 是否改变了我们获取 href 的方式?

#Scrape for videos
# WARNING: Takes very long


HOME = "https://www.youtube.com/user/theneedledrop/videos"
driver = webdriver.Chrome("C:\webdriver\chromedriver.exe")
driver.get(HOME)

scroll()
element_titles = driver.find_elements(By.ID,"video-title")

以下属性是在 WebDriver 对象中找到的

> element_titles[0].get_property('attributes')[0]

{'ATTRIBUTE_NODE': 2,
 'CDATA_SECTION_NODE': 4,
 'COMMENT_NODE': 8,
 'DOCUMENT_FRAGMENT_NODE': 11,
 'DOCUMENT_NODE': 9,
 'DOCUMENT_POSITION_CONTAINED_BY': 16,
 'DOCUMENT_POSITION_CONTAINS': 8,
 'DOCUMENT_POSITION_DISCONNECTED': 1,
 'DOCUMENT_POSITION_FOLLOWING': 4,
 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC': 32,
 'DOCUMENT_POSITION_PRECEDING': 2,
 'DOCUMENT_TYPE_NODE': 10,
 'ELEMENT_NODE': 1,
 'ENTITY_NODE': 6,
 'ENTITY_REFERENCE_NODE': 5,
 'NOTATION_NODE': 12,
 'PROCESSING_INSTRUCTION_NODE': 7,
 'TEXT_NODE': 3,
 '__shady_addEventListener': {},
 '__shady_appendChild': {},
 '__shady_childNodes': [],
 '__shady_cloneNode': {},
 '__shady_contains': {},
 '__shady_dispatchEvent': {},
 '__shady_firstChild': None,
 '__shady_getRootNode': {},
 '__shady_insertBefore': {},
 '__shady_isConnected': False,
 '__shady_lastChild': None,
 '__shady_native_addEventListener': {},
 '__shady_native_appendChild': {},
 '__shady_native_childNodes': [],
 '__shady_native_cloneNode': {},
 '__shady_native_contains': {},
 '__shady_native_dispatchEvent': {},
 '__shady_native_firstChild': None,
 '__shady_native_insertBefore': {},
 '__shady_native_lastChild': None,
 '__shady_native_nextSibling': None,
 '__shady_native_parentElement': None,
 '__shady_native_parentNode': None,
 '__shady_native_previousSibling': None,
 '__shady_native_removeChild': {},
 '__shady_native_removeEventListener': {},
 '__shady_native_replaceChild': {},
 '__shady_native_textContent': 'video-title',
 '__shady_nextSibling': None,
 '__shady_parentElement': None,
 '__shady_parentNode': None,
 '__shady_previousSibling': None,
 '__shady_removeChild': {},
 '__shady_removeEventListener': {},
 '__shady_replaceChild': {},
 '__shady_textContent': 'video-title',
 'addEventListener': {},
 'appendChild': {},
 'baseURI': 'https://www.youtube.com/user/theneedledrop/videos',
 'childNodes': [],
 'cloneNode': {},
 'compareDocumentPosition': {},
 'contains': {},
 'dispatchEvent': {},
 'firstChild': None,
 'getRootNode': {},
 'hasChildNodes': {},
 'insertBefore': {},
 'isConnected': False,
 'isDefaultNamespace': {},
 'isEqualNode': {},
 'isSameNode': {},
 'lastChild': None,
 'localName': 'id',
 'lookupNamespaceURI': {},
 'lookupPrefix': {},
 'name': 'id',
 'namespaceURI': None,
 'nextSibling': None,
 'nodeName': 'id',
 'nodeType': 2,
 'nodeValue': 'video-title',
 'normalize': {},
 'ownerDocument': <selenium.webdriver.remote.webelement.WebElement (session="906f0b2a91a96de78811a8b48c702ce9", element="4105d26d-55b3-49a1-b657-10bbbbf43c84")>,
 'ownerElement': <selenium.webdriver.remote.webelement.WebElement (session="906f0b2a91a96de78811a8b48c702ce9", element="c0d38452-435c-489a-8cb8-858adc4828b9")>,
 'parentElement': None,
 'parentNode': None,
 'prefix': None,
 'previousSibling': None,
 'removeChild': {},
 'removeEventListener': {},
 'replaceChild': {},
 'specified': True,
 'textContent': 'video-title',
 'value': 'video-title'}

我曾尝试浏览 youtube 视频上的网页以获取 href,但我找不到它们

【问题讨论】:

    标签: python selenium beautifulsoup python-requests


    【解决方案1】:

    试试video-title-link

    在 YouTube 的当前状态下,具体哪个元素包含 /watch 链接略微取决于上下文。在主页和频道的“视频”选项卡中,可以在 ID 为 video-title-link 的锚元素中找到给定视频的 URL。

    在给定频道的“主页”选项卡上,相关链接的 ID 仍为 video-title

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 2020-10-09
      • 2018-05-23
      • 2019-07-31
      相关资源
      最近更新 更多