【備忘録】スクレイピング③BeautifulSoupの抽出

スクレイピング
あくまで備忘録なんで雑に記録します

スクレイピング

こすり落とす、削り取るの意味

Webサイトから文字通り、”情報をこそげ取る”のでしょう

例:GoogleのクローラーのGooglebotが、Webサイトを巡回して情報収集する

参考:スクレイピング・ハッキング・ラボ

スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活

参考:図解!Python BeautifulSoupの使い方を徹底解説!

図解!Python BeautifulSoupの使い方を徹底解説!(select、find、find_all、インストール、スクレイピングなど)

上の書籍を実際にやりながら、下のリンクやUdemyで理解を深める手順が一番よかったです

①BeautifulSoupによる取り出し(find_all/findによる抽出)

import requests
from bs4 import BeautifulSoup

url = "https://ja.wikipedia.org"
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")
today = soup.find("div", attrs={"id": "on_this_day"})
today_article = today.text
print(today_article)

>>>
今日は何の日 10月31日

ハロウィン
宗教改革:マルティン・ルターが、ローマ教会の贖宥状の販売を糾弾する「95ヶ条の論題」を教会の壁に貼り出す(1517年)
秩父事件が起こる(1884年)
第一次世界大戦:青島の戦いが始まる(1914年)
ベニート・ムッソリーニが第27代イタリア王国首相に就任(1922年)
ガットスン・ボーグラムによるラシュモア山の4つの大統領像が完成(1941年)
沖縄社会大衆党結成(1951年)
ベトナム戦争:リンドン・ジョンソン米大統領が翌日からの北爆停止を言明(1968年)
インディラ・ガンディー暗殺(英語版)(1984年)
ローマ教皇ヨハネ・パウロ2世がガリレオ・ガリレイに対する裁判の誤りを認め、破門を解く。ガリレオの死後350年目(1992年)
世界人口が70億人を突破(2011年)

②BeautifulSoupによる取り出し(cssセレクタによる抽出)

cssセレクタとは?

引用:CSSのセレクタとは?覚えておきたい25種類と書き方

・タグ名で指定
・class名で指定
・id名で指定など

引用:CSSセレクタのチートシート|37パターンを一覧で解説

cssセレクタによる抽出

elems = soup.select( ‘ セレクタを親子間では > でつないで ‘ )

さらに、1<li>リスト</li>の中にはcontentsが複数入っているので、出力する際は
>>>elems[0].contents[リスト番号]にて出力

import requests
from bs4 import BeautifulSoup

url = "https://ja.wikipedia.org"
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")

today_head = soup.select("#on_this_day > h2 > span > span > a")
today_article = soup.select("#on_this_day > div > ul > li")

print(today_head)
print(today_article)


>>>
[<a href="/wiki/Wikipedia:%E4%BB%8A%E6%97%A5%E3%81%AF%E4%BD%95%E3%81%AE%E6%97%A5_10%E6%9C%88" title="Wikipedia:今日は何の日 10月"><img alt='""' data-file-height="156" data-file-width="156" decoding="async" height="38" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/39/HSDagensdatum.svg/38px-HSDagensdatum.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/39/HSDagensdatum.svg/57px-HSDagensdatum.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/39/HSDagensdatum.svg/76px-HSDagensdatum.svg.png 2x" style="vertical-align: middle" width="38"/></a>, <a href="/wiki/Wikipedia:%E4%BB%8A%E6%97%A5%E3%81%AF%E4%BD%95%E3%81%AE%E6%97%A5_10%E6%9C%88" title="Wikipedia:今日は何の日 10月">今日は何の日</a>, <a href="/wiki/10%E6%9C%8831%E6%97%A5" title="10月31日">10月31日</a>]
[<li><a href="/wiki/%E3%83%8F%E3%83%AD%E3%82%A6%E3%82%A3%E3%83%B3" title="ハロウィン">ハロウィン</a></li>, <li><a href="/wiki/%E5%AE%97%E6%95%99%E6%94%B9%E9%9D%A9" title="宗教改革">宗教改革</a>:<a href="/wiki/%E3%83%9E%E3%83%AB%E3%83%86%E3%82%A3%E3%83%B3%E3%83%BB%E3%83%AB%E3%82%BF%E3%83%BC" title="マルティン・ルター">マルティン・ルター</a>が、ローマ教会の<a href="/wiki/%E8%B4%96%E5%AE%A5%E7%8A%B6" title="贖宥状">贖宥状</a>の販売を糾弾する「<a class="mw-redirect" href="/wiki/95%E3%83%B6%E6%9D%A1%E3%81%AE%E8%AB%96%E9%A1%8C" title="95ヶ条の論題">95ヶ条の論題</a>」を<a href="/wiki/%E6%95%99%E4%BC%9A" title="教会">教会</a>の壁に貼り出す(<a href="/wiki/1517%E5%B9%B4" title="1517年">1517年</a>)</li>, <li><a href="/wiki/%E7%A7%A9%E7%88%B6%E4%BA%8B%E4%BB%B6" title="秩父事件">秩父事件</a>が起こる(<a href="/wiki/1884%E5%B9%B4" title="1884年">1884年</a>)</li>, <li><a href="/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%B8%96%E7%95%8C%E5%A4%A7%E6%88%A6" title="第一次世界大戦">第一次世界大戦</a>:<a href="/wiki/%E9%9D%92%E5%B3%B6%E3%81%AE%E6%88%A6%E3%81%84" title="青島の戦い">青島の戦い</a>が始まる(<a href="/wiki/1914%E5%B9%B4" title="1914年">1914年</a>)</li>, <li><a href="/wiki/%E3%83%99%E3%83%8B%E3%83%BC%E3%83%88%E3%83%BB%E3%83%A0%E3%83%83%E3%82%BD%E3%83%AA%E3%83%BC%E3%83%8B" title="ベニート・ムッソリーニ">ベニート・ムッソリーニ</a>が第27代<a href="/wiki/%E3%82%A4%E3%82%BF%E3%83%AA%E3%82%A2%E7%8E%8B%E5%9B%BD" title="イタリア王国">イタリア王国</a><a href="/wiki/%E3%82%A4%E3%82%BF%E3%83%AA%E3%82%A2%E3%81%AE%E9%A6%96%E7%9B%B8" title="イタリアの首相">首相</a>に就任(<a href="/wiki/1922%E5%B9%B4" title="1922年">1922年</a>)</li>, <li><a href="/wiki/%E3%82%AC%E3%83%83%E3%83%88%E3%82%B9%E3%83%B3%E3%83%BB%E3%83%9C%E3%83%BC%E3%82%B0%E3%83%A9%E3%83%A0" title="ガットスン・ボーグラム">ガットスン・ボーグラム</a>による<a href="/wiki/%E3%83%A9%E3%82%B7%E3%83%A5%E3%83%A2%E3%82%A2%E5%B1%B1" title="ラシュモア山">ラシュモア山</a>の4つの大統領像が完成(<a href="/wiki/1941%E5%B9%B4" title="1941年">1941年</a>)</li>, <li><a href="/wiki/%E6%B2%96%E7%B8%84%E7%A4%BE%E4%BC%9A%E5%A4%A7%E8%A1%86%E5%85%9A" title="沖縄社会大衆党">沖縄社会大衆党</a>結成(<a href="/wiki/1951%E5%B9%B4" title="1951年">1951年</a>)</li>, <li><a href="/wiki/%E3%83%99%E3%83%88%E3%83%8A%E3%83%A0%E6%88%A6%E4%BA%89" title="ベトナム戦争">ベトナム戦争</a>:<a href="/wiki/%E3%83%AA%E3%83%B3%E3%83%89%E3%83%B3%E3%83%BB%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%BD%E3%83%B3" title="リンドン・ジョンソン">リンドン・ジョンソン</a>米大統領が翌日からの北爆停止を言明(<a href="/wiki/1968%E5%B9%B4" title="1968年">1968年</a>)</li>, <li><a href="/wiki/%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%A9%E3%83%BB%E3%82%AC%E3%83%B3%E3%83%87%E3%82%A3%E3%83%BC" title="インディラ・ガンディー">インディラ・ガンディー</a><span title="リンク先の項目はまだありません。新規の執筆や他言語版からの翻訳が望まれます。"><a class="new" href="/w/index.php?title=%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%A9%E3%83%BB%E3%82%AC%E3%83%B3%E3%83%87%E3%82%A3%E3%83%BC%E6%9A%97%E6%AE%BA%E4%BA%8B%E4%BB%B6&action=edit&redlink=1" title="インディラ・ガンディー暗殺事件 (存在しないページ)">暗殺</a><span class="noprint" style="font-size: 0.77em; font-weight: normal;">(<a class="extiw" href="https://en.wikipedia.org/wiki/Assassination_of_Indira_Gandhi" title="en:Assassination of Indira Gandhi">英語版</a>)</span></span>(<a href="/wiki/1984%E5%B9%B4" title="1984年">1984年</a>)</li>, <li><a href="/wiki/%E6%95%99%E7%9A%87" title="教皇">ローマ教皇</a><a href="/wiki/%E3%83%A8%E3%83%8F%E3%83%8D%E3%83%BB%E3%83%91%E3%82%A6%E3%83%AD2%E4%B8%96_(%E3%83%AD%E3%83%BC%E3%83%9E%E6%95%99%E7%9A%87)" title="ヨハネ・パウロ2世 (ローマ教皇)">ヨハネ・パウロ2世</a>が<a href="/wiki/%E3%82%AC%E3%83%AA%E3%83%AC%E3%82%AA%E3%83%BB%E3%82%AC%E3%83%AA%E3%83%AC%E3%82%A4" title="ガリレオ・ガリレイ">ガリレオ・ガリレイ</a>に対する裁判の誤りを認め、<a href="/wiki/%E7%A0%B4%E9%96%80" title="破門">破門</a>を解く。ガリレオの死後350年目(<a href="/wiki/1992%E5%B9%B4" title="1992年">1992年</a>)</li>, <li><a href="/wiki/%E4%B8%96%E7%95%8C%E4%BA%BA%E5%8F%A3" title="世界人口">世界人口</a>が70億人を突破(<a href="/wiki/2011%E5%B9%B4" title="2011年">2011年</a>)</li>]

セレクタがリストとして出力された

次に、テキストだけ、縦に並べて出力したいので

for k in today_head:
    if k.string:
        print(k.string, end=" ")
print()
print()

for i in today_article:
    for j in i:
        print(j.string, end ="")
    print()

>>>
今日は何の日 10月31日 

ハロウィン
宗教改革:マルティン・ルターが、ローマ教会の贖宥状の販売を糾弾する「95ヶ条の論題」を教会の壁に貼り出す(1517年)
秩父事件が起こる(1884年)
第一次世界大戦:青島の戦いが始まる(1914年)
ベニート・ムッソリーニが第27代イタリア王国首相に就任(1922年)
ガットスン・ボーグラムによるラシュモア山の4つの大統領像が完成(1941年)
沖縄社会大衆党結成(1951年)
ベトナム戦争:リンドン・ジョンソン米大統領が翌日からの北爆停止を言明(1968年)
インディラ・ガンディーNone(1984年)
ローマ教皇ヨハネ・パウロ2世がガリレオ・ガリレイに対する裁判の誤りを認め、破門を解く。ガリレオの死後350年目(1992年)
世界人口が70億人を突破(2011年)

コメント

"+r+""+h+""+">"}var c,i=n(45),u=n(74),f=n(64),s=n(53),p=n(76),l=n(41),y=(n=n(52),"prototype"),h="script",v=n("IE_PROTO"),g=function(){try{c=new ActiveXObject("htmlfile")}catch(r){}var r;g="undefined"==typeof document||document.domain&&c?function(r){r.write(a("")),r.close();var t=r.parentWindow.Object;return r=null,t}(c):((r=l("iframe")).style.display="none",p.appendChild(r),r.src=String("javascript:"),(r=r.contentWindow.document).open(),r.write(a("document.F=Object")),r.close(),r.F);for(var t=f.length;t--;)delete g[y][f[t]];return g()};s[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(o[y]=i(t),n=new o,o[y]=null,n[v]=t):n=g(),e===r?n:u.f(n,e)}},function(r,t,e){var n=e(5),o=e(44),a=e(43),c=e(45),i=e(11),u=e(75);t.f=n&&!o?Object.defineProperties:function(r,t){c(r);for(var e,n=i(t),o=u(t),f=o.length,s=0;s=t||56320!=(64512&i(r,e))))return!1}return!0}})},function(r,t,e){var n=e(91),o=String;r.exports=function(r){if("Symbol"===n(r))throw new TypeError("Cannot convert a Symbol value to a string");return o(r)}},function(r,t,e){var n=e(2),o=e(7),a=e(13),c=e(15),i=e(102),u=(e=e(6),Array),f=a("".charAt),s=a("".charCodeAt),p=a([].join),l="".toWellFormed,y=l&&e((function(){return"1"!==o(l,1)}));n({target:"String",proto:!0,forced:y},{toWellFormed:function(){var r=i(c(this));if(y)return o(l,r);for(var t=r.length,e=u(t),n=0;n
タイトルとURLをコピーしました