使用python将文件夹中的HTML文件相互链接
我有一个包含html文件的文件夹,如下所示:使用python将文件夹中的HTML文件相互链接,python,html,Python,Html,我有一个包含html文件的文件夹,如下所示: aaa.html bbb.html ccc.html .... ...... ......... zzz.html <nav> <ul class="pager"> <li class="previous"><a href="#">Previous</a></li> <li class="next"><a href="#
aaa.html
bbb.html
ccc.html
....
......
.........
zzz.html
<nav>
<ul class="pager">
<li class="previous"><a href="#">Previous</a></li>
<li class="next"><a href="#">Next</a></li>
</ul>
</nav>
所有这些HTML都是使用python脚本创建的,因此遵循相同的模板
现在,我想链接所有这些html文件,我在html中已经有了如下占位符:
aaa.html
bbb.html
ccc.html
....
......
.........
zzz.html
<nav>
<ul class="pager">
<li class="previous"><a href="#">Previous</a></li>
<li class="next"><a href="#">Next</a></li>
</ul>
</nav>
而ccc.html
文件将包含:
<nav>
<ul class="pager">
<li class="previous"><a href="bbb.html">Previous</a></li>
<li class="next"><a href="ddd.html">Next</a></li>
</ul>
</nav>
对于其余的文件,依此类推。
这个任务可以用python完成吗?我甚至不知道如何开始。任何提示、建议都会非常有用。您可以使用修改html:
from bs4 import BeautifulSoup
file_names = ['bbb.html', 'ccc.html', ... , 'yyy.html']
# we exclude first and last files (not sure what to do with them ?)
for ind, file_name in enumerate(file_names):
with open(file_name, 'r+') as f:
soup = BeautifulSoup(f.read(), 'html.parser')
# we suppose that there is only one link for previous and next
soup.find_all(class_='previous')[0]['href'] = file_names[ind - 1]
soup.find_all(class_='next')[0]['href'] = file_names[ind + 1]
# erase contents and replace with new html
f.seek(0)
f.truncate()
f.write(soup.prettify("utf-8")) # to get readable HTML
如果文件名与示例中的不一致,并且您希望从目录中的文件生成列表,则可以使用或。您可以通过在文件列表上循环并使用列表包装来替换模板中的元素。下面是使用aaa、bbb、ccc的aaa.html示例:
#f = ['aaa.html','bbb.html','ccc.html']
f = sorted(['aaa.html','bbb.html','ccc.html']) # explicit sorting
t = """<nav>
<ul class="pager">
<li class="previous"><a href="#">Previous</a></li>
<li class="next"><a href="#">Next</a></li>
</ul>
</nav>""" # sample aaa.html file
for i in xrange(len(f)-1):
#print f[i]
t = t.replace('<li class="previous"><a href="#">Previous','<li class="previous"><a href="'+f[(i % len(f)) -1]+'">Previous')
t = t.replace('<li class="next"><a href="#">Next','<li class="next"><a href="'+f[(i % len(f)) +1]+'">Next')
print t
#f=['aaa.html','bbb.html','ccc.html']
f=排序(['aaa.html'、'bbb.html'、'ccc.html'])#显式排序
t=”“”
“”“#示例aaa.html文件
对于X范围内的i(透镜(f)-1):
#打印f[i]
t=t.replace(“(在zzz之后是aaa)
作为aaa.html的输出提供:
<nav>
<ul class="pager">
<li class="previous"><a href="ccc.html">Previous</a></li>
<li class="next"><a href="bbb.html">Next</a></li>
</ul>
</nav>
要完成代码,必须循环使用*.html文件(请参阅)html文件的顺序真的是字母顺序吗?如果你有AAA.html和AAA.html,哪一个是第一位的?你可以使用os.walk
对该目录中的文件列表进行排序,使用自定义排序功能对它们进行排序,你可以在网页抓取模板中使用该功能,然后在该列表上迭代,用beautiful soup读取每个文件以更改这两个占位符到列表上的上一个和下一个元素。@philshem顺序真的不重要。只是一个文件必须与另外两个链接。所以,任何顺序都可以。