🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Q&A

解決済

2回答

3518閲覧

Python BeautifulSoupでリンクをローカルな参照に書き換えたい

UROF

総合スコア5

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

0グッド

0クリップ

投稿2019/11/23 08:48

前提・実現したいこと

PythonでBeautifulSoupを使って、Web上のファイルをローカルに保存するプログラムを作成しています。
Web上のリンク先のファイルも、ローカルに保存しています。

このとき、HTMLファイルのソース内のリンクを、Web上のリンクではなく、ローカルなリンクに変更したいのですが、やり方が良く分かりません。

発生している問題・エラーメッセージ

BeautifulSoupオブジェクトのファイルリンクをローカルな参照先に書き換えたいが、やり方が分からない

該当のソースコード

Python3

import bs4
import reqests

res=requests.get('http://hogehoge.com')
dat=bs4.BeautifulSoup(res.content,"lxml")

f=open('local.htm','w',encoding='utf-8')

for aa in dat.find_all('a'):
link=aa.get('href')
name=aa.get_text()
dat_temp=dat.text.replace(抽出したリンク,ローカルなファイル名)
#このあと、datへdat_tempを書き戻す方法が分かりません。
#dat.text=dat_tempはcan't set attributeというエラーが出ました。

f.write(dat.text)
f.close

試したこと

一旦、
dat_text=dat.text
として、
dat_temp=dat_text.replace(置換対象,置換後)
dat_text=dat_temp
は置換の書き戻しまではできるのですが、HTMLとしての構造が残っていない、巣のText情報だけになってしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

属性書き換え

python

1from bs4 import BeautifulSoup 2 3html = '''<ul> 4<li><a href="http://www.example.com/1.html/">1</a></li> 5<li><a href="http://www.example.com/2.html/">2</a></li> 6<li><a href="http://www.example.com/3.html/">3</a></li> 7<li><a href="http://www.example.com/4.html/">4</a></li> 8<li><a href="http://www.example.com/5.html/">5</a></li> 9</ul>''' 10 11soup = BeautifulSoup(html, "html5lib") 12 13print("変更前") 14print(soup.prettify) 15 16for i in soup.find_all("a"): 17 i["href"] = i.get("href").replace("http://www.example.com", ".") 18 19print("変更後") 20print(soup.prettify)

投稿2019/11/26 04:24

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

他の回答が参考になりませんか?
https://teratail.com/questions/69740

投稿2019/11/25 23:39

shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問