【问题标题】:web scraping dynamic content with python使用 python 抓取网页动态内容
【发布时间】:2013-07-10 14:55:25
【问题描述】:

我想使用 Python 来抓取网页上“您是否在寻找这些作者:”框的内容,例如:http://academic.research.microsoft.com/Search?query=lander

不幸的是,盒子的内容是由 JavaScript 动态加载的。通常在这种情况下,我可以阅读 Javascript 来了解发生了什么,或者我可以使用像 Firebug 这样的浏览器扩展来了解动态内容的来源。这次没有这样的运气...... Javascript 非常复杂,Firebug 没有提供很多关于如何获取内容的线索。

有什么技巧可以让这项任务变得简单吗?

【问题讨论】:

    标签: python web-scraping screen-scraping


    【解决方案1】:

    对于抓取动态内容,您不需要一个简单的抓取器,而是一个成熟的headless browser

    dhamaniasad/HeadlessBrowsers: A list of (almost) all headless web browsers in existence 是我见过的最完整的列表;它列出了每种语言都有哪些绑定。

    (请注意,列出的项目中有不少被放弃了!)

    【讨论】:

      【解决方案2】:

      您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。

      如果您在 chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。

      document.getElementsByClassName('inline-text-org');
      

      返回

      [<div class=​"inline-text-org" title=​"University of Manchester">​University of Manchester​</div>, 
       <div class=​"inline-text-org" title=​"University of California Irvine">​University of California ...​</div>​
        etc...
      

      您可以使用ghost.py 在真实的 DOM 中通过 python 运行 JavaScript。

      这真的很酷:

      from ghost import Ghost
      ghost = Ghost()
      page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
      result, resources = ghost.evaluate(
          "document.getElementsByClassName('inline-text-org');")
      

      【讨论】:

      • 请注意,ghost.py 已被废弃。上一次更新是在撰写本文时 2 年前。
      【解决方案3】:

      之前here 提出了一个非常相似的问题。 引用的是 selenium,最初是用于 web-apps 的测试环境。

      我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更多的细节。

      【讨论】:

      • “刚问”?您的链接指向 2011 年的主题。 - 无论如何,欢迎SO。对主题和您的回答感兴趣,我 +1
      • 你说的完全正确,我什至没有寻找日期... 惭愧不过,感谢您的热烈欢迎!
      猜你喜欢
      • 2023-01-29
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多