Заменить определенный блок HTML между 2 файлами с Python - PullRequest
0 голосов
/ 16 марта 2012

У меня есть 2 похожих файла HTML, назовем их old.html и new.html.

Я хочу открыть new.html, выполнить некоторую обработку, сохранить блок только что отредактированного HTMLи замените соответствующий блок в old.html.

Так что если new.html выглядит так:

<html>
<table>
my content
</table>
</html>

А old.html выглядит так:

<html>
<!--other html -->
<table>
old content
</table>
<!-- other html -->

Впоследствии, old.html будет выглядеть так:

<html>
<!--other html -->
<table>
my content
</table>
<!-- other html -->

Я думаю, что я понял первую часть этой проблемы, я просто не знаю, как на самом деле изменить файлы.Я подумал, что, возможно, каким-то образом использование некоторого текста-заполнителя сработает, но я до сих пор не знаю, как заменить оригинальный блок кода из old.html

Что у меня есть:

from bs4 import BeautifulSoup as Soup
from soupselect import select

new_file = "\\path\\to\\new.html"
old_file = "\\path\\to\\old.html"


f = open(new_file, "rb")
soup = Soup(f)
new_table = soup.table

f2 = open(old_file, "rb")
soup2 = Soup(f2)
old_table = soup2.table

#process new_table here

#how do i replace old_table with new_table?
f.close()
f2.close()

1 Ответ

0 голосов
/ 16 марта 2012

Мое решение использует регулярные выражения и работает для простого примера, который вы привели выше.Однако для сложного файла HTML с множеством таблиц потребуется более сложное решение.

Старый файл HTML

<html>
<!--other html -->
<table>
replace me
I'm old and weak
*cough*  can't.. hang.. on.. much... longer..
</table>
<!-- other html -->

Новый файл HTML

<html>
<table>
I'm new content
replace old content with me
</table>
</html>

Мое решение

import re

# open the files
Old = open('/somelocation/old.html').read()
New = open('/somelocation/new.html').read()

# get the strings you want to swap
NewTableContents = re.findall(r'<table>([\s\S]+?)</table>',New)[0]
OldTableContents = re.findall(r'<table>([\s\S]+?)</table>',Old)[0]

# replace
Replace = Old.replace(OldTableContents,NewTableContents)

# output string to new file
File = open('/somelocation/oldHTMLWithNewTableContents.html','w')
File.write(Replace)
File.close()

Результирующий файл

<html>
<!--other html -->
<table>
I'm new content
replace old content with me
</table>
<!-- other html -->

Этот пример будет работать, если в каждом файле HTML есть одна таблица.Если в одном файле содержится более одной таблицы, вам, возможно, придется придумать, в зависимости от того, какие таблицы вы хотите заменить каким содержимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...