Scriptブロックチェーン役立つ知識サイトマップお問い合わせHOMEWebスキル素人がPythonでWebスクレイピングを実装する8素人がPythonでWebスクレイピングを実装する82018.11.232019.01.25WebスキルWebスクレイピングよこのじ(@yokonoji_work)です。「素人がPythonでWebスクレイピングを実装する」の第8回です。第7回ではスクレイピングの対象を絞り込むことができるようになりました。今回は次の機能を実装してプログラム完成とします。スクレイピング結果をスプレッドシートに書き込む完成版ソースコード完成したプログラムのソースコードとスプレッドシートの内容です。A2セルのURLを読み込んでから、C2以下のセルに記事タイトルを書き込むようにしています。ページネーションのページ数分、記事リストを取得するこのシリーズでは記事タイトルの一覧を取得するプログラムを作成してきました。この単純作業を1ページ分しかできないというのは意味がありません。そのため、ページネーションのページがある分だけ自動でページを移行して、各ページの記事タイトル一覧を取得できるようにします。各ページの記事タイトル一覧の取得の仕組みは次のとおりです。ホーム画面(https://yokonoji.work/)の記事タイトル一覧を取得する「NEXT」より2ページ目のURLを取得する2ページ目の記事タイトル一覧を取得する「NEXT」より3ページ目のURLを取得する3ページ目の記事タイトル一覧を取得する「NEXT」より次のページのURLが取得できなくなるまで繰り返す(最終ページには「NEXT」が表示されない)この動作を利用すれば、例えばネットショップから商品情報の一覧を取得することもできます。スクレイピングに一定の時間間隔を持たせるスクレイピングするためには、Webページにアクセスする必要があります。そのため、多くのページからデータを取得するために短時間で多くのアクセスを行うと、DoS攻撃とみなされる可能性があります。サーバーに負荷がかかるとWebサイト表示速度などのパフォーマンスが低下しますので、Webサイト側は規約やrobots.txtというファイルを用いて、人間やクローラーにアクセスの条件を示します。ユーザーはこれらに違反しないように、サーバーに負荷をかけない利用をする必要があります。「http://www.example.jp/」というURLの場合、「robots.txt」を末尾に付加するとrobots.txtの内容を確認できます。あれば、すべてのファイルへのアクセスを許可しない2つを組み合わせると、すべてのクローラーに対してすべてのファイルへのアクセスを許可しないこととなる。よるインターネット資料の収集について」によると、アクセス間隔を1秒以上空けることが目安として示されています。1秒に根拠があるわけではないようですので、過剰なアクセスとみなされないように余裕を持った時間間隔の設定が必要です。時間間隔の設定は、次のように行いました。timetime.sleep(2.0)timeモジュールのsleep関数を使って、別ページにアクセスする前に2秒のスリープ時間を持たせています。Colab上で認証処理を行いますのでこの連携設定は行わなくても大丈夫です。Colab以外でプログラムを動作させるときには、連携設定を行った上でスプレッドシートの読み込む必要があります。必要であれば、参考の欄に記載のサイトより、行うべき処理をご確認ください。下記、連携設定の手順になります。スプレッドシートからデータを取得して結果を書き込むために、スプレッドシートとの連携の設定を行います。APIsにアクセスして、利用規約に同意します。https://console.developers.google.com/次にプロジェクトを作成していきます。project」というプロジェクト名とします。APIを有効にします。APIが見つからない場合は、メニューのライブラリから「drive」で検索するとみつかります。APIがみつかりますので、こちらも有効にします。DriveとSheetsの有効化が完了したら、「認証情報を作成」よりサービスアカウントキーを選択します。キーのタイプはそのままJSONで問題ありません。「作成」を押すと、内容が保存されてjsonファイルがダウンロードされますので、保存しておきましょう。ファイルを開くと“client_email”に続きアドレスが記載されています。このアドレスをスプレッドシートの右上にある「共有」を開いて入力します。ペンマークより「編集者」となっていることを確認したら、送信を押して設定は完了です。Colabには初期状態でインストールされていますが、これら2つのライブラリが必要です。oauth2clientそして、これらのライブラリをimportします。GoogleCredentialsまた、Googleドライブ内のスプレッドシートにアクセスするために認証が必要です。そのための記述がこちらになります。Colabでないと使えません。gspread.authorize(GoogleCredentials.get_application_default())あとは次のように対象スプレッドシートのURLを指定して、A2セルからURLを読み込んでRequestsに渡しています。wks.acell('A2').valueスクレイピング結果をスプレッドシートに書き込む最後に取得した記事タイトルをスプレッドシートに書き込みます。a)でスプレッドシートの行と列、書き込む内容を指定します。article_listには取得した記事タイトルの一覧を格納していますので、順に取り出しながら3列(C列)の2行目からひとつずつ下のセルに移動しながら書き込んでいます。0で書き込もうとするセルにデータがあれば何も書き込まないようにしています。以上で、スクレイピングプログラム「ローレライ(Loreley)」は完成です。このプログラムをカスタマイズしていけば、いろいろなスクレイピングに対応できそうです。スクレイピングはサイトごとにプログラムの調整が必要ですので、情報がまとまった本が1冊あれば良いかと思います。平均値まで下げたい!高い直帰率・離脱率を下げるための改善方法よこのじ(@yokonoji_work)です。2019年1月21日現在、本サイトの直帰率を確認したところ83%で、かなり高く感じました。Colabで決まりよこのじ(@yokonoji_work)です。「Pythonの開発環境をどうやって構築するか?」この答えが出ましたので、内容をまとめておきたいと思い[...]GoogleドキュメントからWordPressに直接投稿する方法よこのじ(@yokonoji_work)です。ブログ記事の作成をクラウドソーシングで依頼することは一般的に行われています。その外注記事をWordPr[...]SEOにも有効なドメインの常時SSL化とは?HTTPSにできないときの確認ポイントよこのじ(@yokonoji_work)です。このWordPressの常時SSL化をするにあたって勉強した内容と、SSL化したはずなのに反映されずに[...]アドセンス広告の位置変更を検討した。左・右サイドバー配置でも違いがある?よこのじ(@yokonoji_work)です。アドセンス広告は適切な種類と配置を行えば数倍のクリック率を実現できて、それに比例して収益を上げることが[...]よこのじ都内徒歩通勤のピアノ業界で働くエンジニア。技術系の内容を書いてます。https://yokonoji.work/feed/rss2/▼ココナラでWordPressの表示高速化をお手伝いしてます。Scriptでメールを送信する方法【メルマガ機能に応用可】キレイで読みやすいRubyコードを書くために。