質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

323閲覧

webスクレイピングした後にHTMLに書き込みたい

Mr_K

総合スコア28

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/24 08:37

休講情報を抜き出してそれを見やすくHTMLに出力したいのですが,実行画面では上手くいってもHTMLでは上手くいきません.上手く出力するにはどうすれば良いですか?

python

1from selenium import webdriver 2from selenium.webdriver.common.keys import Keys as keys 3#from autotest_lib.client.common_lib.cros import chromedriver 4import urllib 5from bs4 import BeautifulSoup 6import csv 7path_w=r'C:\Users\mkou0\Desktop\HTML\scrap_try.html' 8# Macの場合 (Chromedriveがこのプログラムを実行している同じ場所にある前提) 9#driver = webdriver.Chrome(executable_path="./chromedriver") # Windowsの方はこの行をコメントアウト 10#with chromedriver.chromedriver() as chromedriver_instance: 11 # driver = chromedriver_instance.driver 12 13url="https://duet.doshisha.ac.jp/kokai/html/fi/fi050/FI05001G.html" 14instance=urllib.request.urlopen(url) 15soup=BeautifulSoup(instance,"html.parser") 16get_words=soup.select_one("#form1 > div:nth-child(11) > div > span > table") 17 18print(get_words) 19print() 20rows=get_words.find_all('tr') 21 22for tr in rows: 23 24 cols = tr.find_all('td') 25 #tdはTableDataの略でありテーブルセルの内容を指定する 26 27 for td in cols: 28 info=td.find(text=True) 29 if info==None: 30 info='理由なし' 31 print(info) 32 33 for data in info: 34 result=[[x] for x in data] 35 with open(path_w,mode='a') as f: 36 f.write("\n".join(str(result))) 37 38``````実行画面 392講時 40コリア語会話初級1-1 41李 裕淑 42理由なし 432講時 44ハングル会話初級1-1 45李 裕淑 46理由なし 472講時 48スポーツ・パフォーマンス1-324 49鷲谷 洋輔 50学会 515253

というようになっているのですが,

HTML

1[ [ ' 2 ' ] ][ [ ' 講 ' ] ][ [ ' 時 ' ] ][ [ ' コ ' ] ][ [ ' リ ' ] ][ [ ' ア ' ] ][ [ ' 語 ' ] ][ [ ' 会 ' ] ][ [ ' 話 ' ] ][ [ ' 初 ' ] ][ [ ' 級 ' ] ][ [ ' 1 ' ] ][ [ ' - ' ] ][ [ ' 1 ' ] ][ [ ' 李 ' ] ][ [ ' \ u 3 0 0 0 ' ] ][ [ ' 裕 ' ] ][ [ ' 淑 ' ] ][ [ ' 理 ' ] ][ [ ' 由 ' ] ][ [ ' な ' ] ][ [ ' し ' ] ][ [ ' 2 ' ] ][ [ ' 講 ' ] ][ [ ' 時 ' ] ][ [ ' ハ ' ] ][ [ ' ン ' ] ][ [ ' グ ' ] ][ [ ' ル ' ] ][ [ ' 会 ' ] ][ [ ' 話 ' ] ][ [ ' 初 ' ] ][ [ ' 級 ' ] ][ [ ' 1 ' ] ][ [ ' - ' ] ][ [ ' 1 ' ] ][ [ ' 李 ' ] ][ [ ' \ u 3 0 0 0 ' ] ][ [ ' 裕 ' ] ][ [ ' 淑 ' ] ][ [ ' 理 ' ] ][ [ ' 由 ' ] ][ [ ' な ' ] ][ [ ' し ' ] ][ [ ' 2 ' ] ][ [ ' 講 ' ] ]

となってしまいます.

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

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

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

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

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

can110

2019/04/24 08:56

「実行画面ではうまくいく」というのは「print(get_words)」の出力結果のことでしょうか?
guest

回答1

0

ベストアンサー

「実行画面」というのが何を表しているのか、data変数にどのような型の値が入ると意図しているのかが不明ですが
data変数値は文字型になっているようです。
それをresult=[[x] for x in data]としているので一文字ずつ[]で囲われてしまっています。
単純にdata変数値を、(必要に応じて<br/>タグを付加して)ファイル出力するだけでよいと思われます。

投稿2019/04/24 08:52

can110

総合スコア38233

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

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

Mr_K

2019/04/24 09:17

for td in cols: info=td.find(text=True) if info==None: info='理由なし <br/>' else: info=info+'<br/>' print(info) for data in info: with open(path_w,mode='a') as f: f.write("<br/>".join(str(data))) としたらきれいに改行ができました。 助言いただきましてありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問