2014-05-02 8 views
1

Я сохраняю некоторые файлы html локально, и я хочу удалить их из любой ненужной информации. Это по существу означает, что я хочу удалить все сценарии < > и < > теги и их соответствующее содержание.Python cache html file

Я использую селена WebBrowser, и я могу получить доступ исходный код страницы с чем-то вроде этого:

from selenium import webdriver 

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

У меня было три идеи:

  • Использование JQuery для устранения unncecessary теги, а затем доступ атрибут page_source для локального кэширования. Что-то вдоль:

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

Но этот код не будет работать, потому что я не могу покалечить исходный код страницы внутри, потому что мне нужно место, чтобы быть цельным для дальнейшего взаимодействия с драйвером, например селен. + используйте 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. Но нет никаких способов изменить dom в экземплярах webdriver.

Я думаю, что подход lxml является лучшим, потому что, независимо от того, как я пытаюсь обернуть голову вокруг проблемы, я не должен испортить экземпляр webdriver, так как мне нужно взаимодействовать с ним дальше. Я что-то пропустил с помощью lxml?

Приветствия

ответ

2

Вы можете найти как script и style тегов в одном xpath выражении. После удаления тегов, получить модифицированный HTML, используя lxml.html.tostring():

parsed = lxml.html.fromstring(html) 

for bad in parsed.xpath('//script|//style'): 
    bad.getparent().remove(bad) 

print lxml.html.tostring(parsed) 
+0

Большое спасибо, что работает прекрасно. –