他カテゴリ

Pythonistaで使っているWebスクレイピングのコード

nonstop-iida's icon'
  • nonstop-iida
  • 2020/03/07 23:02

おはようございます。

今日は、実際に僕がPythonista(iPhoneやiPadでPythonが実行できるアプリ)でほぼ毎日のように起動しているWebスクレイピングのコードをご紹介します。

※Pythonistaなんぞや?という方は以下を参照ください

 

Content image

 

1. 実行内容

実行内容は、@マークITというアイティメディア株式会社が運営する、IT系の情報サイトから、記事のタイトルとリンクを抽出するものです。

2.目的

実際にサイトを訪れて、読みたい記事を選べばいーじゃん?そうなんです。

しかし、iPhoneで画面をスクロールしながら、広告以外の読みたい記事を探して・・・って意外に面倒で。あ、僕かなりの面倒くさがり屋なんです。

実はPythonistaで実行すると、コンソールに表示されたリンク(URL)から直接記事に飛ぶことができるため、すごく便利なのです。

↓こんな

Content image
Content image
画面上部を見ると、Pythonistaのアプリ内ということが分かります

Pythonista内でそのまま記事が読めるのが、すごく便利なのです。

唯一難点は、上の画面にもあるとおり記事によっては会員限定です。(登録は無料)

都度ログインしないといけないのが面倒。そこで僕は、➀タイトルを見て気になった記事だけ開く、➁もっと先まで読みたいという記事はリンクをコピーして、chromeで開きなおして全文読む、➂更に後で見返しそうだなという記事はEvernoteに連携。

ということを毎朝やってます。新聞読んで、ITニュース読んで、時間余ったらPythonistaでなんかコード書く。というルーティンが多いです。

結構、Python関連の記事も多いから、そのままPythonistaでコード試してみたりなんてことも多いです!

3.Pythonコード

スクレイピングする時に使うと便利な、BeautifulSoupはPCだと外部モジュールとしてpip installしないと使えませんが、Pythonistaはなんと標準装備しています!

ある訳ないと思って、初めから諦めていたのですが、よく見たらありました(笑)

ざっくりどんな処理をしているかというと、

➀ 前回までに抽出した記事をcsvファイルから文字列として読み込む(5~12行目)

目に入るものをできるだけ少なくするために、前回までに実行した際に表示・保存した記事はカットするためです。

➁ スクレイピングしてタイトルとリンクを収集(14~42行目)

urlという変数に@ITのURLを渡して、リクエスト送信(requests.get(url))をしてページのHTMLコードを取得します。(14行目~16行目)

取得したレスポンスをWEBサイト側が利用している文字コードでエンコードして、テキスト形式にします。(17・18行目)

BeautifulSoupにテキスト形式にしたレスポンス情報と、HTML言語のテキスト解釈をするためのhtml.parserを引数として渡して、変数soupに格納。soup.find_all('a')というスクレイピング処理でaタグを抽出。タイトルとリンク(URL)をリストに格納します。(20行目~30行目)

ちなみに、GoogleCromeで右クリック→検証とすると、HTMLコードが確認できます。どのように、スクレイピングしていけば欲しい情報だけ取れるか、確認が可能です。

Content image

この場合は、aタグ(<a href="・・・・・”>✕✕✕✕</a>)の記事タイトルをもあるので、text属性で記事タイトル、href属性でURLが取得できます。

find_all()はリスト形式で、aタグの情報を抽出するので、リストから順番に取り出して、.textでテキスト情報を取り出して、titlesというリストに記事タイトルを、['href']でhref以降のURLをlinksというリストに放り込んでます。

※.strip()は余計な空白がついている場合に、削除するためのものです

※https:が頭についていない場合、リンクから飛んでもWEBサイトが参照できないため、httpsがあるかを確認して、無い場合は足したうえでリストに放り込んでます。

※WEBサイト内に同じ記事が複数回登場することもあるので、41・42行目で記事タイトル、リンク(URL)それぞれのリストで重複をなくす処理をしています。

➂ 処理結果を記録し、収集内容をCSVファイルに保存する(44行目~74行目)

いつ処理をしたのか?何件記事を収集して、何件は重複のため捨てたのか?収集結果を後で見返す、または次回プログラム実行時に記事の重複を探すための源泉にするため、CSVファイルに書き込む処理です。

 

最後まで読んでいただき、ありがとうございました!

 

 

Supporter profile icon
Article tip 1人がサポートしています
獲得ALIS: Article like 99.03 ALIS Article tip 1.10 ALIS
nonstop-iida's icon'
  • nonstop-iida
  • @nonstop-iida
ノンストップ飯田と申します。会社員ですが、趣味でやってるPythonと歌うのが好きです。曲も書きます。twitter:@nonstop_iida

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
他カテゴリ

テレビ番組で登録商標が「言えない」のか考察してみる

Like token Tip token
26.20 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
トラベル

わら人形を釘で打ち呪う 丑の刻参りは今も存在するのか? 京都最恐の貴船神社奥宮を調べた

Like token Tip token
486.35 ALIS
Eye catch
トラベル

梅雨の京都八瀬・瑠璃光院はしっとり濃い新緑の世界

Like token Tip token
216.64 ALIS
Eye catch
トラベル

無料案内所という職業

Like token Tip token
84.20 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

Like token Tip token
6.32 ALIS
Eye catch
他カテゴリ

SASUKEオーディションに出た時の話

Like token Tip token
35.87 ALIS