Python 缓存 HTML 文件
我在本地保存一些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
表达式中同时找到 script
和 style
标签。去掉这些标签后,可以使用 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)