修改html文件中的所有本地链接

时间:2019-04-26 10:28:32

标签: python regex python-3.x beautifulsoup

我想从html页面更改链接,如下所示:

//html
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        <p>this is a simple text in html file</p>
        <a href="https://google.com">Google</a>
        <a href="/frontend/login/">Login</a>
        <a href="/something/work/">Something</a>
    </body>
 </html>



//Result
    <html>
        <head>
            <title>Hello</title>
        </head>
        <body>
            <p>this is a simple text in html file</p>
            <a href="https://google.com">Google</a>
            <a href="/more/frontend/login/part/">Login</a>
            <a href="/more/something/work/extra/">Something</a>
        </body>
     </html>

那么如何更改html的结果并使用python将其另存为html?

3 个答案:

答案 0 :(得分:0)

好吧,通过Regex做到这一点非常简单。

使用href="\/([^"]*)作为样式,并使用href="\/more\/\1additional作为替换样式。

在这里看看:

https://regex101.com/r/7ACBFY/2


先前的“ 50%尝试”(对不起,我想念您的第二部分):

https://regex101.com/r/7ACBFY/1

答案 1 :(得分:0)

如果您将html文件存储为字符串(例如html),则可以执行简单的替换操作:

result = html.replace('<a href="/', '<a href="/more/')

答案 2 :(得分:0)

我已经自己解决了。但是我认为这可以帮助很多人。这就是为什么我要回答我的问题并将其公开显示

谢谢Nicolas。他30%到50%的解决方案为我提供了完整的解决方案。

import re

regex = r"href=\"\/"

test_str = ("<html>\n"
    "    <head>\n"
    "        <title>Hello</title>\n"
    "    </head>\n"
    "    <body>\n"
    "        <p>this is a simple text in html file</p>\n"
    "        <a href=\"https://google.com\">Google</a>\n"
    "        <a href=\"/front-end/login/\">Login</a>\n"
    "        <a href=\"/something/work/\">Something</a>\n"
    "    </body>\n"
    " </html>")

subst = "href=\"/more/"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

subst2 = "\\1hello/"
regex2 = r"(href=\"/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\), ]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)"
result2 = re.sub(regex2, subst2, result, 0, re.MULTILINE)

if result2:
    print (result2)

writtingtofile = open("solution.html","w")
writtingtofile.write(result2)
writtingtofile.close()
  

输出:

enter image description here