【问题标题】:How can I render JavaScript HTML to HTML in python?如何在 python 中将 JavaScript HTML 渲染为 HTML?
【发布时间】:2015-06-06 22:19:33
【问题描述】:

我环顾四周,只找到了将 URL 呈现为 HTML 的解决方案。但是,我需要一种能够将网页(我已经拥有,并且具有 JavaScript)呈现为正确 HTML 的方法。

想要: 网页(使用 JavaScript)---> HTML

不是:URL --> 网页(使用 JavaScript)---> HTML

我不知道如何让其他代码按我想要的方式工作。

这是我用来呈现 URL 的代码: http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/

为了清楚起见,上面的代码采用了一个网页的 URL,该网页的某些部分由 JavaScript 呈现,所以如果我通常使用 urllib2 抓取页面,那么我不会得到所有呈现为的链接等在 JavaScript 之后。

但是我希望能够抓取一个页面,用 urllib2 再说一遍,然后渲染该页面并获得结果 HTML。 (与上面的代码不同,因为它需要一个 URL 作为它的参数。

感谢任何帮助,谢谢大家:)

【问题讨论】:

  • 我发现你想要什么不清楚。也许您可以举例说明“将网页呈现为适当的 HTML”的含义。你想要实际的 DOM 吗?你想要文本 HTML 吗?当您“将网页输入浏览器”(即使用浏览器打开此文本文件)时,可以完成渲染,因此尚不清楚您还想实现哪些浏览器尚未完成的操作。
  • 现在你已经说得更清楚了——我会选择 Selenium Web Driver。你考虑过吗?如果您给出urllib2 代码的更具体示例,那么我也许可以使用相应的 Selenium 代码来引用它。
  • 现在完全不清楚你想要什么:“我想要这部分,但在某种程度上就像第一个例子一样” - 但第一个例子没有做任何事情。它只是在评论中说“我想渲染文本并获得纯 HTML”。那么您是否要呈现 URL ???如果您首先使用 urllib2 将数据从 URL 提取到文件中,会有什么不同?无论哪种情况,您都必须在某个时候发送 HTTP 请求。您可以获取文本文件并将其输入 Selenium(或任何其他抓取实用程序),但这与直接使用 URL 没有什么不同。
  • 该 URL 受 cloudflare 保护,我不知道如何获取绕过的 url,因为如果我直接获取 URL,它会给我云耀斑块页面。但是,我有办法获得绕过的 HTML
  • 所以您可以使用urllib2 获取它吗?这怎么可能???

标签: javascript python web-scraping


【解决方案1】:

你可以从命令行pip install selenium,然后运行类似的东西:

from selenium import webdriver
from urllib2 import urlopen

url = 'http://www.google.com'
file_name = 'C:/Users/Desktop/test.txt'

conn = urlopen(url)
data = conn.read()
conn.close()

file = open(file_name,'wt')
file.write(data)
file.close()

browser = webdriver.Firefox()
browser.get('file:///'+file_name)
html = browser.page_source
browser.quit()

【讨论】:

  • 我遇到了另一个问题,有什么更方便的地方可以问你吗?
  • @user3928006:在另一个问题中发布。你不仅会问我,还会问整个社区(这样你就有更好的机会得到一个好的答案)。如果您当时特别注意,您可以在评论中将其链接到此问题。
  • 这与这个问题非常相关,呈现的页面中的某些内容没有呈现出我的预期,我将使用我编辑的代码版本更新这个问题
  • @user3928006:不,不要这样做,它会使答案过时并且部分无关紧要。这不是这里通常的做法。如果您的新问题与此问题(或答案)有关,请将其链接到您发布的新问题中
  • 哦。哎呀,我已经编辑过了:/(谢谢你的未来提示,我猜,,,)
【解决方案2】:

试试 webdriver.Firefox().get('url')

【讨论】:

    【解决方案3】:

    我使用的模块是request_html。第一次使用它会自动下载一个 chromium 浏览器,然后你可以渲染任何网页(使用 JavaScript)

    requests_html 也支持html parsing

    基本上是selenium 的替代品,使用自动设置而不是手动设置

    示例:

    from requests_html import HTMLSession
    
    session = HTMLSession()
    
    r = session.get(URL)
    
    r.html.render() # you can use r.html.render(sleep=1) if you want
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 2011-06-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多