我希望能够使用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)
答案 0 :(得分: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()