Напечатает одну строку, потому что каждый раз, когда он находит то, что вы говорите для поиска, открывает этот файл и записывает его. Компьютер не знает слова «удалить», когда мы говорим о словах в файлах =]] Так что для него не важно, что находится в этом файле (и если этот файл не будет существовать, создаст его) с самого начала и запишет егоочередной раз. по этой причине a работает для вас.
try:
with open(file="demo.txt", mode="w", encoding="utf-8") as file:
for h3 in soup.find_all('a'):
file.write(str(h3.text))
finally:
file.close()
И для этого удаляю строки, я думаю, вы не хотите, чтобы какая-то информация была на них, поэтому проверьте, что вам не нужно, и сделайте другуюоператор if внутри.
...
for h3 in soup.find_all('a'):
if stringA in h3.text or stringB in h3.text:
pass
else:
file.write(str(h3.text))
...