使用 Beautiful Soup / Python 将一个网站的 <body> 替换为另一个网站

问题描述 投票:0回答:2

我正在尝试用另一个标签及其内容替换标签和下面的所有内容。

**** 代码 ****

from bs4 import BeautifulSoup as bs
import os
import re

 
# Remove the last segment of the path
base = os.path.dirname(os.path.abspath(__file__))

# Coffee Template
coffee = base + "\website-templates-master\coffee-shop-free-html5-template\index.html"

print(coffee)

with open(coffee) as coffee_html:
    # turn html into a list
    coffee_blob = coffee_html.readlines()

for line in coffee_blob:
    if "<body" in line:
        start = coffee_blob.index(line)
    if "</body>" in line:
        end = coffee_blob.index(line)

data = coffee_blob[start:end] 

# Open the HTML in which you want to make changes
# html = open(os.path.join(base, 'index.html'))

with open(base + "\index.html") as html:
 
    # Parse HTML file in Beautiful Soup
    soup = bs(html, 'html.parser')
 
# Give location where text is stored which you wish to alter

    body = soup.find('body').text
    soup.body.replace_with(data) 

期望数据的内容(包含咖啡模板中从标签开始到标签结束的每一行的列表)将替换 html 文件中的内容。 html 文件只是一个准系统 html 文件,其正文中有一些

标签。

我得到的是:AttributeError:'list'对象没有属性'parent'

我需要一种解决方案来读取一个文件的正文并替换另一个文件的正文;基本上取代了网站

python beautifulsoup replace
2个回答
0
投票

我可以通过首先使用 join 将列表中的项目转换为字符串来使其工作。

data = ''.join(data)

但是,如果有人有更有效的方法来完成相同的任务,请告诉我。谢谢


0
投票

确实是一条无信息的错误消息。显然,replace_with() 采用可变长度参数 (*args),而不是元素列表,因此当给定一个列表时,它会尝试插入该列表,就好像它是一个元素一样。传递未打包的列表:

replace_with(*data)

这是要走的路。

© www.soinside.com 2019 - 2024. All rights reserved.