他カテゴリ

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 94.70 ALIS Article tip 1.10 ALIS
nonstop-iida's icon'
  • nonstop-iida
  • @nonstop-iida
ノンストップ飯田と申します。会社員ですが、趣味でやってるPythonと歌うのが好きです。曲も書きます。twitter:@nonstop_iida

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

京都のきーひん、神戸のこーへん

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

ブロックチェーンの51%攻撃ってなに

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

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

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

無料案内所という職業

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

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
59.32 ALIS
Eye catch
ビジネス

ブックオフで買ってきてアマゾンで売る仕事の1ヶ月の売り上げ公開

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

オランダ人が語る大麻大国のオランダ

Like token Tip token
46.20 ALIS
Eye catch
ビジネス

海外企業と契約するフリーランス広報になった経緯をセルフインタビューで明かす!

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

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

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

スーパーコンピュータ「京」でマイニングしたら

Like token Tip token
1.06k ALIS
Eye catch
他カテゴリ

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

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

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

Like token Tip token
69.82 ALIS