pythonの勉強を始めたばかりです。知識が不足しているため、初歩的なご質問になるかもしれませんが、どうぞよろしくお願いいたします。
前提・実現したいこと
鳥についての一覧表を作成したく、下記リンク先サイトから以下5つの情報を取り出して、最終的にCSVに展開したいと考えています。
○ リンク(Bird Fanのサイト)
○ 取得してCSVに展開したい情報
0. <h2>フォトギャラリー野鳥図鑑(身近な鳥)</h2>
0. <h3>身近な鳥(スズメ大)</h3>
0. <h4>各鳥の名前</h4>
0. <p>鳥についての説明</p>
0. <a href=">リンク先URL</a>
- 上記1~3(<h2>~<h4>)の情報は、1つずつ(<h2>のみなど)であれば取得できるのですが、4と5も含め、全ての情報を一括で取得する場合の方法が分かりません。こちらのサイトで検索もしてみたのですが、前提知識が乏しいこともあり応用できそうな物を見つけられませんでした。
- CSV出力については、他のサイトを参考に実行してみましたが出力できませんでした。
- 複数の情報の抽出方法、<p>と<a href=>を取得するための記述、csv出力方法、この3点が分かりません。
該当のソースコード
上記リンク先のソースコードの一部です。
=================
<div class="section"> <h2>フォトギャラリー野鳥図鑑(身近な鳥)</h2> <h3><a name="01" id="01"></a>身近な鳥(スズメ大)</h3> <p><img src="/gallery/library/img_index/rz2_003.jpg" width="100" height="100" alt="" align="left" style="margin:0px 10px 5px 0px;"></p> <h4>スズメ</h4> <p>スズメ目ハタオリドリ科<br /> 全長:14.5cm 翼開長:22.5cm<br /> 人家付近でのみ見られる。ほおに黒い斑(幼鳥ではうすい)。<br /> <a href="/pg/kind/ord17/fam1727/spe172702/">スズメについて詳しくはこちらをご参照ください</a></p> <br style="clear:both;"> <p><img src="/gallery/library/img_index/rs_006.jpg" width="100" height="100" alt="" align="left" style="margin:0px 10px 5px 0px;"></p> <h4>シジュウカラ</h4> <p>スズメ目シジュウカラ科<br /> 全長:14cm<br /> 白いほお、胸から腹にネクタイ模様(太い方が雄)。<br /> <a href="/pg/kind/ord17/fam1718/spe171805/">シジュウカラについて詳しくはこちらをご参照ください</a></p> <br style="clear:both;">=================
試したこと
以下で<h4>の情報は取得できました。
================
import requests
import bs4
res = requests.get('https://www.birdfan.net/gallery/library/sanya_mijika.html#01')
res.encoding = res.apparent_encoding
soup = bs4.BeautifulSoup(res.text, "html.parser")
elems = soup.find_all('h4')
for elem in elems:
print(elem.getText())
================
以下でcsv出力はできませんでした。
================
import csv
import requests
import bs4
res = requests.get('https://www.birdfan.net/gallery/library/sanya_mijika.html#01')
res.encoding = res.apparent_encoding
soup = bs4.BeautifulSoup(res.text, "html.parser")
elems = soup.find_all('h4')
for elem in elems:
with open('bird.csv', 'w',newline='') as csvfile:
writer = csv.writer(csvfile)
================
補足情報(FW/ツールのバージョンなど)
Windowを使用しており、取得情報に文字化けがあるため "res.encoding = res.apparent_encoding" の一文を入れました。
以上です。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/08 13:21