Programming

Blog >> Topics >> Programming

BeautifulSoup4で某番組HPをスクレイピング

今回はここのページをスクレイピングします.使途未定ですが,同一人物の写真が大量にあるので解析に使えるかもしれないし使えないかもしれない. 春の番組改編でリニューアルしてましたけど何にも変わってなかったですね.でもホームページだけは変わってるんですよ.古いページは任天堂1を除いて十中八九消される運命なので救出しなければなりません.すでにバナー消えてたし. 解析 http://www.ntv.co.jp/anothersky/fashion/index.html http://www.ntv.co.jp/anothersky/fashion/index_2.html http://www.ntv.co.jp/anothersky/fashion/index_3.html … http://www.ntv.co.jp/anothersky/fashion/index_25.html <div class="entryBox clearfix"> <div class="img"> <img src="画像1"> <img src="画像2"> </div> <div class="entryBody"> <h3>日付</h3> <p>詳細</p> </div> </div> another skyの雰囲気良いですよね.シンプルで洗練された印象があります.一つ気に食わない点があって,ワイプが斜めなんですよ.そこだけ変に立体感があってゴチャっと見えるというか.惜しい. スクレイピング def scrape(soup) : pages = soup.find_all(class_='entryBox clearfix') for page in pages : div = page.find(class_='entryBody') # 日付取得 date = ''.join(div.find('h3').text.split()) dir = './data/' + date + '/' os.mkdir(dir) # 詳細取得 details = div.find('p').text with open(dir + str('details.txt'), 'w', encoding='utf-8') as file : file.

ブログ記事中のスニペットを外部参照する

[展開する] 上を表示するためのHTMLは次の通りです. <pre><code class="language-cpp" src="./sample.cpp"></code></pre> 端的には<pre><code>にsrc属性を追加します. 動機 最近はもっぱらラップトップでブログを書くわけですが,画面が小さく1,エディタとプレビューでいっぱいいっぱいになってしまいます.こんな状態でスニペットを含むMarkdownを開いた光景は,JR武蔵小杉駅の南武線ホームを彷彿とさせます. スニペットを省略できれば全体の見通しが良くなることはもちろん,メンテナンス性の向上(?)も期待されます.どっかの数学者も言ってましたね.「ソースコードは分割せよ」って. 流れ jQueryを読み込む DOMの書き換え Markdown jQueryを読み込む 今回はjQueryを使うことにします.<head>内で読み込み. <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <head> DOMの書き換え [展開する] メモ indexと書いたが実際は何を指しているのか不明.なんだろう. Markdown 今回の記事のソースコードはこんな感じ. --- title: "ブログ記事中のスニペットを外部参照する" date: 2019-03-27T10:00:00+09:00 draft: false topics: ["Programming"] tags: ["jQuery", "HTML"] --- <pre><code class="language-cpp" src="./sample.cpp"></code></pre> 上を表示するためのHTMLは次の通りです. ```html <pre><code class="language-cpp" src="./sample.cpp"></code></pre> ``` 端的には`<pre><code>`に`src`属性を追加します. ## 動機 最近はもっぱらラップトップでブログを書くわけですが,画面が小さく[^1],エディタとプレビューでいっぱいいっぱいになってしまいます.こんな状態でスニペットを含むMarkdownを開いた光景は,JR武蔵小杉駅の南武線ホームを彷彿とさせます. スニペットを省略できれば全体の見通しが良くなることはもちろん,メンテナンス性の向上(?)も期待されます.どっかの数学者も言ってましたね.「ソースコードは分割せよ」って. ## 流れ - [jQueryを読み込む](#jQueryを読み込む) - [DOMの書き換え](#DOMの書き換え) - [Markdown](#Markdown) ## jQueryを読み込む 今回はjQueryを使うことにします.`<head>`内で読み込み. ```html <head> <script src="https://ajax.

Node.jsで作る番組情報通知Bot

実行結果 小さいかもしれませんね.すみません. 先に この記事は下記事の内容をパクったと言っても過言ではありません. もはや写経ですが勉強記録用なので. 動機 時の流れか,我が家では4月から新聞の購読を停止することになりました.非常に残念であります.かくいう私も,新聞をまともに読んでいたのはGコードが消えるか否かのころまでだったと思います.今ではラテ欄とスポーツ欄に隔月で発生する大相撲ぐらいしか読んでいません.あと下世話な週刊誌の広告. テレビっ子な私はラテ欄の代替を探さなければならないわけですが,Webの番組表の扱いにくさは厳しいものがあります.あの縦長どうにかなりませんか.あの中で見たい番組を探すのは至難の技でしょう.こんな状態なので最低限,自分が興味のある番組くらいは抑えておきたいわけです.スクレイピングはPythonでかじっているので苦労はしないと思うのですが. 流れ 手作業でのURL取得 スクレイピングと整形 Slackへの通知 実行 手作業でのURL取得 番組を探す — Gガイド.テレビ王国で見たい番組のキーワードや芸能人の名前を入力しURLを生成します.ここ一番ダサいです.試しに地上波+金属バット1で検索します. https://tv.so-net.ne.jp/schedulesBySearch.action?condition.genres[0].parentId=-1&condition.genres[0].childId=-1&stationPlatformId=1&condition.keyword=%E9%87%91%E5%B1%9E%E3%83%90%E3%83%83%E3%83%88&submit=%E6%A4%9C%E7%B4%A2&descriptive=true このURLとページのソースを元にスクレイピングしていきます.url.jsonには後で使う情報を入れておきます. url.json [展開する] スクレイピングと整形 TV_scrape.js [展開する] メモ ライブラリはcheerio-httpcliを使う.requireはimportみたいなものだろうか. 関数名の前にasyncを置くと内部でawaitが使える.awaitは待機と例外処理を担う? index側からfetchにURLを投げる. タグはそのまま,idは#,classは.を付けて表現する. module.exportsは外から呼んだときに使えるようにするもの? Slackへの通知 slack.js [展開する] メモ 一言一句違わず申し訳ない気持ちになる. やっていることは単純だが一から書くとなると… index.js 通知といったら瓦版なのでチャンネル名は#瓦版です.fetchの前にawaitを入れないとエラーを吐くので気を付けます(1敗). [展開する] 実行 node index.js 角界のロボコップ 他にやりたいこと AWSで定期的に実行. Slackのslash-commandを用いた検索条件の追加削除. 今回はここまで. 金属バット (お笑いコンビ) — Wikipedia [return]