僕の世界観を変えてみるスマートフォン用の表示で見る僕の世界観を変えてみる文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。プログラミングシェアするTwitterGooglePocketLinePythonいじっていてあれこれどう書くんだっけ?ってことがよくありますよね。僕もそんなわけなんでググるんですけど欲しい情報がなかなか出てこなかったり、というかそこに時間を割きたくないので自分のブログをノート代わりに残そうと思います。Pythonフォルダにたくさん入れておくのも嫌なので。今回はBeautifulSoupとRequestsについてです。BeautifulSoupの使い方1.まずはインポート2.ソースを打ち込む3.スープを作る4.スープから要素を取り出す。User-Agentを偽装する実践まとめBeautifulSoupの使い方htmlから情報を引き出すモジュールです。urlからじゃなくてhtmlからってところが肝です。Beautifulsoup現在はBeautifulSopu4.2とかが出ています。3はもう打ち切られたようなのでドキュメントは4系のものを見てください。charset="utf-8"><title>文系男子がPython3で画像収集するスクリプトを作ってみた。<p>僕と同じ初心者の方がつまづかないように一応僕なりに解説しておきます。<p>間違ってるかもしれないんですけど、大目に見てくだされ。<p>デフォルトのhtml.parserでも結果は変わりません。class="markb"><b>for文でimgタグ</b></span>を取得します。class="markb"><b>ローカルフォルダに画像データを保存する方法</b></span>です。</span>のリストそのままだと読んでくれません。<p>なのでfor文を使って新しい変数targetに入れます。<p>そしてtargetをrequests.getで読み込みそれをさらにrespに入れます。</div></body>]</html>'''サイト上でCtrl+iを押すとソースが表示されますがそれをここに打ち込む必要があります。これがめんどくさいのでRequestsやurllibを使うんですけどね。僕はRequests派です。BeautifulSoup(requests.get(url).content,'html.parser')こうするとソースを張り付ける必要がないのでコードもごちゃごちゃしないで済みます。bs4.BeautifulSoupと書く必要があります。まあ最初に書くかあとに書くかの違いなんですけど、結局soupに代入するので手間は変わらないのかな?ちなみに、bs4のドキュメントにも書かれていますがパーサーはlxmlが爆速らしいです。lxmlでインストールすれば使えるようになります。パーサーはパースするという意味で、パースは解析って意味です。lxmlはxmlのパーサーなんですがxmlがまたわからないですよね。xmlはマークアップ言語の一種でHTMLに近しいものです。HTMLの場合は見出しにh2やh3を使いますが、xmlの場合はとかとかわかりやすい表示をしたものです。CMSとITアウトソーシングを提供する、XMLソリューションカンパニー4.スープから要素を取り出す。要素を見つけるにはfindかfind_allを使います。だいたいfind_allでOkなんじゃないですかね。h3のタグを取り出したい場合は下記のようなコードになります。id="コード解説">コード解説</h3>]実行結果を見るとわかるように[]で囲まれています。リストみたいになっているのでtypeで確認するのと他にもpとtitleも取り出してみます。'bs4.element.ResultSet'>-----------------------------------------[<p>僕と同じ初心者の方がつまづかないように一応僕なりに解説しておきます。<p>間違ってるかもしれないんですけど、大目に見てくだされ。<p>デフォルトのhtml.parserでも結果は変わりません。class="markb"><b>for文でimgタグ</b></span>を取得します。class="markb"><b>ローカルフォルダに画像データを保存する方法</b></span>です。<p>なのでfor文を使って新しい変数targetに入れます。<p>そしてtargetをrequests.getで読み込みそれをさらにrespに入れます。</p>]-----------------------------------------[<title>文系男子がPython3で画像収集するスクリプトを作ってみた。僕の世界観を変えてみる</title>]bs4.element.ResultSetとなっているのでたぶんセットの一種なんでしょう。取り出してみると要素が,で区切られリストになっていますね。このままだと見づらいので1行ずつ表示していきます。print(p)実行結果<p>僕と同じ初心者の方がつまづかないように一応僕なりに解説しておきます。</p><p>間違ってるかもしれないんですけど、大目に見てくだされ。</p><p>デフォルトのhtml.parserでも結果は変わりません。class="markb"><b>for文でimgタグ</b></span>を取得します。class="markb"><b>ローカルフォルダに画像データを保存する方法</b></span>です。</p><p>なんかよくわからないけどサポートしてないだとかなんかエラーが出たような?</p><p>なのでfor文を使って新しい変数targetに入れます。</p><p>そしてtargetをrequests.getで読み込みそれをさらにrespに入れます。</p>stringを使うとタグを取り除いたテキストだけの表示もできます。僕と同じ初心者の方がつまづかないように一応僕なりに解説しておきます。間違ってるかもしれないんですけど、大目に見てくだされ。デフォルトのhtml.parserでも結果は変わりません。なんかよくわからないけどサポートしてないだとかなんかエラーが出たような?なのでfor文を使って新しい変数targetに入れます。targetをrequests.getで読み込みそれをさらにrespに入れます。要素が見つからないとnoneが返ってくるらしいです。pあるのにおかしいよね。この結果からタグが入れ子になっているとnoneが返ってくるようですな。なんでなのか教えてほしい。spanの要素が欲しい場合も同じように指定すればいいだけです。class="markb"><b>ローカルフォルダに画像データを保存する方法</b></span>]for文でimgタグローカルフォルダに画像データを保存する方法これはspanのclassが同一なので関係ないんですが、classが複数あるようならclass_='class名'で指定できます。classだけでなくidも指定できますが残念ながらBeautifulSoupはxpathで指定できないようです。xpathを指定する方法もあるようですけどね。idやclassの書き方はいくつかあるようですが僕はこの書き方が簡単なので気に入ってます。User-Agentを偽装するスクレイピングしていると要素があるのに取り出せないことがあります。その原因の一つがHTTP403エラーです。linuxにあるwgetコマンドを使うとわかりやすいんですが、例えば乃木坂46の公式サイトは403が返ってきます。これはアクセス拒否されたことを意味していて、スクレイピング対策なのかなんからしいです。簡単に言えばブラウザから見てね、クローラーはお断りだよってことです。この場合はUser-Agentを偽装してFireFoxで見ているようにすればいいわけです。試しに乃木坂のサイトをスクレイピングしてメンバーが何人いるのか数えてみます。robots.txtも規約にも書かれてないから平気だよね。F12でクロームのデベロッパーツールを起動させます。1のアイコンをクリック2で取り出したい部分にカーソルを合わせるとソースが表示されます。class=“main”でくくられているのがわかります。4で名前はspanで囲まれていることがわかりました。ここまでわかればコードが書けます。[]で空のリストを作っておきます。find_allでclassがunitのdivを取り出して行きます。forを使うのは繰り返し取り出す必要があるからです。forを使ってspanを取り出しますがここはもっと簡略化できます。member.append(div.find('span').string)人数がわかるように人名の前に数字が入るようにしました。カウンターを作ります。forでmemberという名前のリストから一人ずつ取り出していきます。取り出すごとにiのカウントを+1していきます。iは数値なので、str(i)と書くことでmember同様文字列に変換します。すると上のような結果になります。伊藤万理華ちゃんが卒業するから新しいメンバーが入るんでしょうかね。まとめBeautifulSoupとRequestsの基本的な文法を残しました。ググってもパンッってコードが貼ってあってこれでできるとか書かれたブログあるじゃないですか。それだとわからないんですよね。すごい丁寧に書かれたブログもあるんですけどどれがそうだったかわからなくなるんですよね。基本的な文法を知りたくなったら自分のブログを見ることにします。あ、あと参考になったブログも忘れないように残しておきます。ヶ月)工場→カフェバイト→質屋の店長→現在SEもどき。2019年10月にバセドウ病と診断される。僕の世界観を変えてみるスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。