【问题标题】:Scrape inner frame HTML抓取内框 HTML
【发布时间】:2017-02-08 00:24:01
【问题描述】:

我有一个 Python 脚本,它在 html 页面中抓取 <video> 元素的 src 属性。在this page的视频上使用浏览器检查器,可以看到需要抓取的视频元素,但是直接查看页面源只能显示ember应用的JavaScript文件。

我需要做什么才能访问包含<video> 元素的“内框”标记,以便我可以抓取src 属性?

已编辑,因此没有那么宽泛

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    无需走完整的浏览器/硒路线。只需进行更多调查,您就会看到它是如何工作的:

    对于 vine URL https://vine.co/v/i3pQ70vK3iv,您需要描述视频的 json 文件。

    如此简单地抓取 URL https://archive.vine.co/posts/i3pQ70vK3iv.json。这将返回如下文件:

    {
      "username": "Bleacher Report",
      "userIdStr": "906307026416705536",
      "postId": 1352573572862066700,
      "verified": 1,
      "description": "??",
      "created": "2016-06-09T06:14:43.000000",
      "permalinkUrl": "https://vine.co/v/i3pQ70vK3iv",
      "userId": 906307026416705500,
      "profileBackground": "0x333333",
      "vanityUrls": [
        "BleacherReport"
      ],
      "entities": [],
      "postIdStr": "1352573572862066688",
      "comments": 293,
      "reposts": 2384,
      "videoLowURL": "http://mtc.cdn.vine.co/r/videos_r2/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=oVIxbcFKL5aaqsbMx_q.7wt4zEnhgQ0w",
      "loops": 19182516,
      "videoUrl": "http://mtc.cdn.vine.co/r/videos/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=av0W8OaLWSzghq.9__iKdSU4y75FDNg.",
      "videoDashUrl": "http://mtc.cdn.vine.co/r/videos_dashhd/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4?versionId=98zVYTYAx16DJka7Oa1yQu20utGrQch9",
      "thumbnailUrl": "http://v.cdn.vine.co/r/thumbs/DC69CF91B61352573549554077696_558739dd749.17.0.4126553130190094381.mp4.jpg?versionId=7LmJNEI3C6bsHkF3t9jqu5k1O2xEHo9l",
      "explicitContent": 0,
      "likes": 6593
    }
    

    您会在返回的 json 中找到视频本身的 URL 作为 videoUrl 属性。

    【讨论】:

      【解决方案2】:

      JS 在客户端上运行以填充页面的视频元素,因此您需要一个 Web 驱动程序来完全填充页面以访问这些元素。你可以试试硒:

      from selenium import webdriver
      
      driver = webdriver.Firefox()
      driver.get("https://vine.co/v/i3pQ70vK3iv")
      video = driver.find_element_by_tag_name('video')
      print video.get_attribute('src')
      driver.close()
      

      如果您想“无头”运行驱动程序(没有 gui),请参阅 Is it possible to run selenium (Firefox) web driver without a GUI?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多