お帰りなさい｡
データはあるのですが､ まだちょっと汚いんです｡
というか､ 本当にフィルタリングしていないんです｡
100票以上のストーリーしか気にしないので､ きれいな表示方法も欲しいところです｡
だから､ それに取り組もう｡
関数を作りたいので､ Createと呼ぶことにします｡
カスタムハッカーニュースとこの作成 カスタムハッカーニュースは､ リンクと票を受け取ることになります｡
こちらには上記のようなものがあります｡
ここで､ 新しいハッカーニュースリストを作成しますが､ 最初は空です｡
そして今は､ ハッカーニュースリストを返すことだけが目的です｡
しかし､ このリストの中では､ テキストだけを追加し､ HTMLは一切追加したくないのです｡
ですから､ 例えばリンクの場合は､ タイトルだけを気にします｡
では､ どうすればいいのか｡
いくつかのことをループさせたいと考えています｡
これから行うのは4と言うことで､ ここではenumerateを使います｡
そこで､ インデックスと､ アイテムを用意します｡
そして､ ここでは､ enumerateを使用します｡ enumerateは以前にも紹介しましたが､ 同様にインデックスを取得します｡
そして､ リンクを列挙していくのですが､ なぜ列挙するのか､ その理由は後ほど紹介します｡
そこで､ この中に各リンクのタイトルを取り込みたいと思います｡
これを実行するだけで､ Link.
インデックスの
あるいは､ Let's change this to ID X, that's a little nicer.
をつかむわけです｡
各リンクのインデックスです｡
そして､ get textという美しいスープの中の何かを使うことができます｡
そしてこれは､ テキストの中のテキストを取得することになります｡
そして､ これを始めるにあたって､ ただ単純に､ ドットアペンドを使って､ リストにタイトルを追加するにはどうすればいいのか､
と言うことです｡
では､ これを呼び出すとどうなるのか見てみましょう｡
Create Custom Hacker Newsと言い､ リンクと票を渡すつもりです｡
では､ これを保存して実行してみましょう｡
あ､ あと､ ここではenumerateのスペルが書けないみたいなので､ 直しておきましょう｡
EAとの新たなメリットになるはずです｡
もう一度やってみよう｡
さて､ エラーは出ませんでしたが､ これを理想的に印刷したいと思います｡
ということにしておきましょう｡
プリントする｡
そして､ 私たちが何を得るかを見てください｡
これを実行します｡
わかりました｡
あれを見てください｡
テキスト､ リンクのタイトルはすべて揃っています｡
それは素晴らしいことです｡
なるほど｡
しかし､ これらのタイトルはリンクがなければ意味がない｡
そうだろ？
また､ HTMLの中にリンクを覚えている場合｡
Hと呼ばれるもので定義されています｡
このH ref属性は､ 私たちがクリックすることで､ 次のページやこのタイトルのページに移動するためのリンクです｡
そのため､ それを掴んでh refとすることもできます｡
そして､ これはイコールになるのです｡
リンク
インデックス
そして今回は､ テキストを取得しないようにします｡
また､ 参照先がない場合やリンクが壊れている場合に備えて､ 2番目のパラメータにデフォルトを指定して､
noneとします｡
このハッカーニュースは､ 今回のrefに追加して､ これを実行すればいいわけです｡
あれを見てください｡
ページ内に全てのリンクがあります｡
すごいですね｡
しかし､ 今さらタイトルとレフを組み合わせるのはどうなんでしょう？
まあ､ これはかなり簡単なことでしょう？
辞書を使えばいいんです｡
つまり､ リストにはタイトルを持つ辞書を追加することができます｡
そして､ また｡
リンクを貼ってください｡
になりますね｡
こちらです｡
だから､ ここに｡
これで､ タイトルとリンクが付いた辞書ができあがります｡
だから､ 保存すれば｡
そして､ これをもう一度実行してください｡
あれを見てください｡
リンクのある辞書があるんです｡
そして､ タイトルも｡
すごい｡
そこで､ 必要な情報を取得し､ リンクとテキストを取得するのです｡
他のことはどうでもよくて､ それでも票を持ってるんだ｡
では､ どうすればいいのか｡
票のことです｡
さて､ 変数を作成することもできますし､ これと区別するために､ 投票の代わりにポイントということにしましょう｡
ポイントも｡
ということになりそうですが､ どうするんでしょうか？
票をつかむのです｡
インデックス
このようにループしているので､ 単純に「テキストを取得する」というだけなのです｡
では､ テキストを取得したときの初期状態を確認してみましょう｡
だからこの中で､ プリントするだけです｡
ポイント､ 何が出るかはお楽しみ｡
そして､ 今はポイントに集中するために､ ここからプリントを削除します｡
だから､ 保存して実行するんだ｡
わかりました｡
エラーが発生し､ これらすべてのポイントが取得されましたが､ リストインデックスが範囲外であるというエラーが発生したようです｡
そして､ これは､ ウェブサイトをスクレイピングする際に､ 時々デバッグしなければならない小さな問題点です｡
しかし､ 本質的にここで起こったことは､ あるストーリーがあり､ これは実際に投票がない特別なもので､
Hacker News のトップページでは非常に珍しいことです｡
でも､ こっちの方は投票がないんですよ｡
つまり､ 本質的には､ 私はこの点数､ ポイントを掴んでいなかったということです｡
だから､ 技術的には投票数よりリンク数の方が多いんです｡
だから､ この最後のリンクに行くまでに､ まあ､ 投票リストが1つ減っているわけです｡
だから､ ちょっと､ 最後の最後に票を集めようと思っても､ もう票はないんだ､ となるんです｡
このリストは､ リンクリストよりも短いものです｡
ここで簡単なチェックを行い､ これらのものを取得する際に､ 投票のあるストーリーのみを対象としていることを確認します｡
そして幸いなことに､ このために100点以上の話かどうかをチェックしたいのです｡
その方法として､ ここにif文を追加するのです｡
さて､ if文を追加する前に､ 実はこれを数値に変換して､ もしあるストーリーが100ポイント以上だったら､
それを保持して新しいHacker Newsに追加したい､ と言えるようにしたいのです｡
そこでまず､ シンプルに言っておきたいことがあります｡
これをint型に変換したいこと｡
しかし､ 私たちは置き換えもしたいのです｡
ここでのポイントは､ 空間のポイントは､ まあ､ 何もないんです｡
そこで､ ドット置換を利用して､ 「スペースポイントを表示させたら､ ここにも表示させることができますよ｡
それをただの空文字列に置き換えて欲しいのです｡
つまり､ これは数値である文字列を返して､ それを整数に変換しているのです｡
では､ テストしてみましょう｡
ここでブラケットを閉じましょう｡
セーフを押して､ 私たちのスクリプトを実行してください｡
そして､ そこにあるのは
私たちは数字を持っています｡
それは素晴らしいことです｡
しかし､ やはり､ このエラーが出てしまいます｡
では､ ここで何ができるのか？