我在本地保存了一些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的东西吗?
干杯
答案 0 :(得分:2)
您可以在单个script
表达式中找到style
和xpath
个标记。删除标记后,使用lxml.html.tostring()
:
parsed = lxml.html.fromstring(html)
for bad in parsed.xpath('//script|//style'):
bad.getparent().remove(bad)
print lxml.html.tostring(parsed)