Python 缓存 HTML 文件

1 投票
1 回答
1020 浏览
提问于 2025-04-18 05:11

我在本地保存一些html文件,想把里面不必要的信息去掉。简单来说,就是想删除所有的<script>和<style>标签以及它们里面的内容。

我使用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的使用上漏掉了什么?

谢谢!

1 个回答

2

你可以在一个 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)

撰写回答