Python缓存html文件

时间:2014-05-02 22:30:08

标签: python html selenium lxml lxml.html

我在本地保存了一些html文件,我想从所有不必要的信息中删除它们。这实质上意味着我要删除所有< script>和< style>标签及其各自的内容。

我使用selenium webbrowser,我可以使用以下内容访问页面源:

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,然后删除所有不需要的信息。此后访问修改后的页面源和缓存locall。在代码中:

    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的东西吗?

干杯

1 个答案:

答案 0 :(得分:2)

您可以在单个script表达式中找到stylexpath个标记。删除标记后,使用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)