首页 文章

使用BeautifulSoup更新HTML文件

提问于
浏览
1

我希望能够使用BeautifulSoup保存我对HTML文件所做的更改 . 我的脚本当前能够找到HTML文件中包含单词“data”的所有href,然后能够利用Google的url结果构建一个新的href . 标签值正确打印但问题是我无法看到输出文件中反映的那些更改,因为它似乎没有更新Soup .

更新以反映工作解决方案 -

# making the soup
htmlDoc = open('test.html', "r+")
soup = BeautifulSoup(htmlDoc)

i = 0 #initialize counter

for tag in soup.findAll(href=re.compile("data")): #match for href's with keyword data
    i += 1
    print i
    print tag.get_text()    
    text = tag.get_text() + "applications"
    g = pygoogle(text)
    g.pages = 1
    # print '*Found %s results*'%(g.get_result_count())
    if "http" in g.get_first_url(): 
        print g.get_first_url()
        new_tag = soup.new_tag("a", href=g.get_first_url())
        new_tag.string = tag.get_text()
        print new_tag
        tag.replace_with(new_tag)


print "Remaining"
print i

htmlDoc.close()

html = soup.prettify(soup.original_encoding)
with open("test.html", "wb") as file:
    file.write(html)

1 回答

  • 2

    您已经创建了一个新标签 new_tag = soup.new_tag("a", href=g.get_first_url()) ,但实际上没有将 new_tag 插入到 HTML 代码中,您只将其分配给变量 new_tag .

    您需要使用BeatifulSoup提供的 insert()append() 方法,才能将标记实际放置在html中 .

    或者您可以使用以下内容重新分配链接的 'href'

    htmlDoc = open('test.html', "r+")
    soup = BeautifulSoup(htmlDoc)
    
    i = 0 #initialize counter
    
    for tag in soup.findAll(href=re.compile("data")): #match for href's with keyword data
        i += 1
        print i
        print tag.get_text()    
        text = tag.get_text() + "applications"
        g = pygoogle(text)
        g.pages = 1
        # print '*Found %s results*'%(g.get_result_count())
        if "http" in g.get_first_url(): 
            print g.get_first_url()
            new_tag['href'] = g.get_first_url()
    

相关问题