使用python将文件夹中的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="#

我有一个包含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>
所有这些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顺序真的不重要。只是一个文件必须与另外两个链接。所以,任何顺序都可以。