【问题标题】:How can I load all of a site's resources, including AJAX requests, etc.. in Python?如何在 Python 中加载站点的所有资源,包括 AJAX 请求等?
【发布时间】:2014-10-03 17:02:22
【问题描述】:

我知道如何使用 Python 请求网站并阅读其文本。过去,我曾尝试使用 BeautifulSoup 之类的库来向网站上的链接发出所有请求,但这并没有得到看起来不像完整 url 的东西,例如 AJAX 请求和大多数对原始域(因为“http://example.com”会丢失,更重要的是,它不是<a href='url'>Link</a>格式,所以 BeautifulSoup 会丢失)。

如何在 Python 中加载网站的所有资源?它是否需要与 Selenium 之类的东西进行交互,或者如果没有它,是否有一种不太难实现的方法?我没怎么用过 Selenium,所以我不确定这会有多难。

谢谢

【问题讨论】:

  • 点击Ctrl/Command + S(保存菜单项)后,您想像浏览器一样下载完整的网页吗?
  • 这样就行了!我想我可能刚刚使用下面的方法找到了它(很高兴听到其他选项,我希望我有从...中找到它的链接):import urllib2 url = 'http://example.com' headers = {'User-Agent' : 'Mozilla/5.0'} request = urllib2.Request(url,None,headers) sock = urllib2.urlopen(request) ch = sock.read() sock.close()
  • 抱歉,结果不如我所愿。没有新行。
  • 当然,python+selenium,正如你标记的那样。
  • 糟糕,无需发布解决方案:基本上就是这样:stackoverflow.com/questions/14516590/…

标签: python selenium beautifulsoup urllib2 python-requests


【解决方案1】:

我很想听听其他方法,特别是如果它们更简洁(更容易记住),但我认为这可以实现我的目标。但它并没有完全回答我最初的问题——这比使用requests.get(url) 得到更多的东西——在这种情况下对我来说已经足够了`:

import urllib2
url = 'http://example.com'
headers = {'User-Agent' : 'Mozilla/5.0'}
request = urllib2.Request(url,None,headers)
sock = urllib2.urlopen(request)
ch = sock.read()
sock.close()

【讨论】:

    【解决方案2】:

    嗯,这是一个非常有趣的问题。对于那些由于在运行时生成的 URL 或类似的东西(例如脚本中使用的,不仅是 AJAX)而无法完全识别的资源,您需要实际运行网站,所以执行脚本并创建动态 URL。

    一种选择是使用类似于this answer describes 的东西,它使用第三方库(如Qt)来实际运行网站。要收集所有 URL,您需要某种方式监控网站发出的所有请求,这可以通过 like this (although it's c++, but the code's essentially the same) 来完成。

    最后,一旦你有了 URL,你就可以使用 Requests 之类的东西来下载外部资源。

    【讨论】:

      【解决方案3】:

      这完全取决于您想要什么以及您想要的方式。最适合您的是

      from ghost import Ghost
      ghost = Ghost()
      page, extra_resources = ghost.open("http://jeanphi.fr")
      assert page.http_status==200 and 'jeanphix' in ghost.content
      

      您可以通过以下方式了解更多信息:http://jeanphix.me/Ghost.py/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 2023-01-15
        相关资源
        最近更新 更多