【问题标题】:Python cache html filePython缓存html文件
【发布时间】:2014-06-19 17:07:57
【问题描述】:

我正在本地保存一些 html 文件,我想从所有不必要的信息中删除它们。这实质上意味着我想删除所有

我使用 selenium 网络浏览器,我可以通过以下方式访问页面源:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://somesite.com')
html = driver.page_source

我有三个不同的想法:

  • 使用 jQuery 删除不必要的标签,然后访问 page_source 属性以将其缓存在本地。顺带一提:

    driver.execute_script("""$('style, script').remove()""")
    cache(driver.page_source)
    

但是这段代码不起作用,因为我不能在内部削弱页面源,因为我需要网站完好无损才能与 selenium 驱动程序实例进行进一步交互。 + 使用 lxml 解析 driver.page_source,然后删除所有不需要的信息。在此之后访问修改后的页面源并在本地缓存。在代码中:

    parsed = lxml.html.fromstring(driver.page_source)

    for bad, worse in zip(parsed.xpath('//script'), parsed.xpath('//style')):
      bad.getparent().remove(bad)
      worse.getparent().remove(worse)
    cache(parsed.text)
    # Problem: parsed.text is empty :/ How can I access the modified source? Remember, I don't need no text_content()

+ 直接在 webdriver 中修改和截断源代码,然后访问 page_source 属性。但是没有任何方法可以改变 webdriver 实例中的 dom。

我想 lxml 方法是最好的方法,因为无论我如何试图解决这个问题,我都不应该弄乱 webdriver 实例,因为我需要与它进一步交互。我错过了 lxml 的东西吗?

干杯

【问题讨论】:

    标签: python html selenium lxml lxml.html


    【解决方案1】:

    您可以在单个 xpath 表达式中找到 scriptstyle 标记。去掉标签后,使用lxml.html.tostring()获取修改后的html:

    parsed = lxml.html.fromstring(html)
    
    for bad in parsed.xpath('//script|//style'):
        bad.getparent().remove(bad)
    
    print lxml.html.tostring(parsed)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-08
      • 2020-12-17
      • 2023-04-04
      • 2017-02-07
      • 2016-10-28
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多