Beautifulsoupでタグの中身を置換(imgのリンクをローカルにダウンロードしたファイルに置換)した結果を出力しようとしています。
タグの中身は置換できたのですが、それを出力する方法が分からず、困っています。
url="GetしたいURL" html_text = requests.get(url).text soup = BeautifulSoup(html_text, 'html.parser') #img Srcを取得 srcs = [] save_path = './images/' # 画像の拡張子が、.jpg, .png, jpeg いずれの場合も取得 for link in soup.find_all('img'): if link.get('src').endswith('.jpg'): srcs.append(link.get('src')) elif link.get('src').endswith('.png'): srcs.append(link.get('src')) elif link.get('src').endswith('.jpeg'): srcs.append(link.get('src')) # ローカルにファイル保存 for i, image in enumerate(srcs): re = requests.get(image) i += 100 with open(save_path + f'{i}' + "." + image.split('.')[-1], 'wb') as f: f.write(re.content) # ここもスマートなやり方があれば....(なんかPythonっぽくないやり方になってます) i=100 for link in soup.find_all('img'): fn=save_path + f'{i}' + ".jpg" link.attrs['src']=fn i=i+1 # これは出力できる print(soup.prettify) f=open("output.htm","wb") # これが出力できない f.write(soup) # HTMLの情報が抜けてしまい、本文テキストだけになる f.write(soup.text) f.close()
soupオブジェクトそのものをwriteするにはどのように指定すれば良いのでしょうか?
あるいは、他にもっとスマートなやり方があれば教えてください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。