個人業務用アシスタント作成#2。Yahoo ニュースのヘッドラインクローリング
前文で上のコードを使ってyahooのニュースのヘッドラインを持って来させました。 この程度のコードは簡単に書い,理解される方も多いと思いますが,もしやウェブ クローリングが初めての人のために(私がそうだったので) 1行ずつ説明をしてみようと思います。
- import requests
- from bs4 import BeautifulSoup as bs
importは設置されたライブラリーをpython環境から持ってきて使用するという宣言です。 ここではまず,ウェブと情報を取り交わすためにrequestsのライブラリーをもたらし,このように持ってきた情報をparsing(構文解析)するためにBeautifulSoupのライブラリーを持ってきました。
この時,BeautifulSoupライブラリーはbs4というパッケージの中にあるものなので,まずfrom bs4にパッケージを読み込み,その中のBeautifulSoupを持ってきました。 そしてこれが長すぎるので,今後これをbsと指称(as bs)することにしました。
- url = ‘https://news.yahoo.co.jp/’
- news = requests.get(url)
- html = news.text
- soup = bs(html, 'lxml’)
1番行はYahooニュースのウェブページをurlという変数に指定したものです。
2番行はrequestsの下位機能である,getを利用してウェブの情報を取得します。 このとき持ってくる対象の住所は,1番行で定義したurlになるのです。 もちろんここにurl変数以外のhttpアドレスを入力しても良いのですが,変数を使用するのがシンプルなのでこのように処理しました。 そして,このようにして持ってきた情報をnewsという変数に指定します。
3番行は,news変数からテキストのみを抽出(.text)し,これをhtmlという変数に指定します。
4番行はbsでparsingします。 構造はbs(parsing 対象,parsing 方式)です。 つまり,3列のhtml変数をparsingし,その方式はlxmlという意味です。 こうやってparsingした情報をsoupという変数にします。https://news.yahoo.co.jp/こうしてsoupの情報をみると(print(soup)を利用)ページのhtml(タグ)が全て入っていることを確認することができます。
こうしてsoupの情報をみると(print(soup)を利用)ページのhttml(タグ)が全て入っていることを確認することができます。
- headline_title =
- headline_url =
これは,あらかじめ出力する情報の空いている欄を作ってあげるものです。 状況によって情報が変わるはずなのでリストの形態で作りました。 headline_titleは題名を,headline_urlは該当記事のアドレスになります。
その下は記事の情報を抽出する部分です。 このときメインヘッドライン(写真のある記事)と残りのヘッドラインで分けることができます。 注意すべきは写真のあるヘッドラインはタイトルに"写真"という言葉が後に追加されるためこれを消さなければなりません。 まず,メインヘッドラインを抽出し,"写真"という単語を取り除きます。
- news_head = soup.select('#epTabTop > ul.topics > li.topTpi > div > h1 > a')
- headline_title.append(news_head[0].text.replace("写真",""))
- headline_url.append(news_head[0].get('href'))
1つの行は,bsのselectを利用してCSSセレクタに該当する情報を取得します。 soupという変数がもっている情報の中から.selectを利用して選択するが,その選択対象が()の中にあるCSSセレクターという意味です。
二行目はこのように選択した情報の中からテキストだけを持ってきて(.text)"写真"という単語を何もないものにするということです(.replace("バイブの単語","交換したい単語"))
三番目の行は,セレクタで選択した情報の中からhref タグを持ってくるものです。
CSSセレクタが少し難しいと思いますがクロム開発ツールを利用すれば容易です。 クロム開発ツールで左上のアイコンをクリックし,CSSを希望する領域にカーソルを持っていくとハイライトになり,その位置でクリックすると該当領域のhttmlに位置します。 この状態でウクリック > Copy > Copy Selectorを押すとCSSセレクターがコピーされます。 これを上の<CSS Selector>に貼り付ければいいです。
下は同じような行動を繰り返すようにfor文を使って繰り返しさせました。 CSSセレクタの位置は異なりますが,構造は上と同じです。
こうしてheadline_titleとheadline_urlを出力するようにprint命令を実行させました。
個人業務用アシスタント作成#1。基本構造とWebクローラー
個人的に業務を進めるものの中で繰り返して実行するものが多いし引き続き状況をアップデートしなければならないものが多くて無駄に時間をつぶしていました。
個人的に業務を進めるものの中で繰り返して実行するものが多いし引き続き状況をアップデートしなければならないものが多くて無駄に時間をつぶしていました。
そのため,最近はPythonで簡単にコードを作り,Telegramで必要な業務を進め,その内容の報告を受けるというふうに手伝っています。 このポストでは,簡単にその方式を一緒に分け合おうと思います。
基本構造は下記の通りです。
まず,ユーザーがTelegramでボットに作動を望む機能をコマンドで実行させます。
すると,TelegramがPythonで作成しておいたコードを実行させます。
Python プログラムでは,動作したコードを使ってTelegram メッセージで返却します。
最終的にユーザは,動作させた命令に合った結果を受け取るようになります。
ここで,"業務プログラム"の部分を変えることで,さまざまな機能を実装することができます。 ここでは簡単にYahoo! Newsの最初のページのヘッドラインニュースを持ってくることにしてみます。 ソースコードは以下の通りです。
これに対する詳しい機能は後日説明しますが,基本的にYahooニュースページでの初10の記事をheadline_title,headline_urlという変数で出力してくれます。 後にこれを基盤としてTelegramと疎通するコードが入ります。