【问题标题】:How to scrape value from page that loads dynamicaly?如何从动态加载的页面中抓取价值?
【发布时间】:2016-09-03 21:36:14
【问题描述】:

我试图抓取的网站主页显示四个选项卡,其中一个显示“[Number] Available Jobs”。我有兴趣抓取 [Number] 值。当我在 Chrome 中检查页面时,我可以看到包含在 <span> 标记中的值。

但是,当我直接查看页面源代码时,<span> 标记中没有包含任何内容。我计划使用 Python requests 模块发出 HTTP GET 请求,然后使用正则表达式从返回的内容中捕获值。如果内容不包含我需要的数字,这显然是不可能的。

我的问题是:

  1. 这里发生了什么?如何将值动态加载到 页面,显示,然后不出现在 HTML 源代码中?

  2. 如果页面源中没有出现该值,我该怎么办? 到达那里?

【问题讨论】:

标签: python html httprequest httpresponse


【解决方案1】:

如果内容没有出现在页面源中,那么它可能是使用 javascript 生成的。例如,站点可能有一个列出作业的 REST API,Javascript 代码可以从 API 请求作业并使用它在 DOM 中创建节点并将其附加到可用作业。这只是一种可能性。

废弃这些信息的一种方法是弄清楚 javascript 是如何工作的,并让你的 python 抓取工具做同样的事情(例如,如果它正在使用一个简单的 REST API,你只需要向它发出请求相同的网址)。通常这并不容易,因此另一种选择是使用支持 javascript 的浏览器(如 selenium)进行抓取。

我要提到的最后一件事是that regular expressions are a fragile way to parse HTML,您通常应该更喜欢使用像 BeautifulSoup 这样的库。

【讨论】:

    【解决方案2】:

    1.一个值可以用ajax动态加载,ajax是异步加载的,这意味着站点的其余部分不会等待ajax被渲染,这就是为什么当你得到DOM时,用ajax加载的元素不会出现在它。

    2.对于抓取动态内容,您应该使用 selenium,here a tutorial

    【讨论】:

      【解决方案3】:
      1. 对于动态加载的数据,您应该在网络中查找 xhr 请求,如果您可以使该数据对您有用,那么瞧!
      2. 你可以幻化 js,它是一个无头浏览器,它使用动态加载的内容捕获该页面的 html。

      【讨论】:

        猜你喜欢
        • 2018-01-18
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多