スクレイピング
最近、以前Pythonで実装したクローラーをnode.jsに移行しようとしています。将来的にpuppeteerを使ったスクレイピングが必要になったときにnode.jsで詰まりたくないのと、Promiseやasync/awaitを使ったプログラミングのサンプルとして遊んでみたかったのがそ…
pyppeteerを使ってクローリングする際、「JSを実行して値を取り出す」ため、セキュリティのための制限にひっかかることが割とあるようです。 私の場合、CSSの情報を取り出す際に、以下の問題に引っかかりました。 > document.styleSheets[0].cssRules VM5262…
Pythonから簡単にHeadless Chromeを利用できるpyppeteerというライブラリがあります。Headless Chromeの操作をラップしてくれてかなり便利なのですが、ほとんどの関数やメソッドが非同期(async)nあので、しばらく遊んでasync/awaitを使った実装に慣れる必要…
社会人になって数年も経つと、オタク趣味を続けるのも大変になってきました。 以前はいくらでも音楽の情報を追って遊んでられていたのですが、そこそこ真面目にプログラマーやろうとすると「あのグループって今は活動してるんだっけ?」とか「知らないうちに…
「スクレイピングで他サイトの改修をチェックして自社サイトの参考にしよう」という上司の無茶振り要望に応えてあげようキャンペーン第二弾です。 kiito.hatenablog.com 前回のコードを回して、一応改修箇所は検知できていたようですが、正直全然使い物にな…
WEBサイトの改修を検知するプログラムがそれなりにうまくいきそうなのですが、改修があったときにyamlの文字列を見てもピンと来ません。 kiito.hatenablog.com というわけで、PythonからSeleniumを介してPhantomJSを動作させ、 スクリーンショットを撮ること…
自然言語処理をやっている人はよく辞書の整備が大変だと言います。 そんな話をしていたところ、「自分が詳しくない分野の言葉を知るときはweblio辞書が便利だよ」という知見を教えてもらいました。 www.weblio.jp しかし、私は怠惰なプログラマーなので、ス…
上司から「サイトがマメに更新されてると、Googleの検索エンジンからの評価が上がるらしいんだけどさぁ、 他サイトの更新頻度をチェックしたり簡単に比較する方法ない?」というふんわりした話題がありました。 単純に考えると、サイトのHTMLを定期的にスク…
アニメグッズやゲーム等、中古商品を取り扱う駿河屋の一覧ページをいい感じに取得するためのライブラリを作りました。 github.com というのも、駿河屋には新着商品チェック機能が(ひととおり探した限りでは)無く、「新着入荷した同人CDをチェックしたい」…
ここ最近スクレイピングで遊んで手に入れたスキルを活かして、不動産業界のニュースを通知するTwitterアカウント不動産情報共有( @fdj_info )を作りました。 当アカウントは以下のロジックで不動産ニュースを自動通知します。1. FDJ社のニュースブログ( http…
不動産のことよくわかんねーって言ってる友だちがいたので、簡単なスクレイピングのプログラムを書いて、不動産の情報収集を日々行っています。 「urlを集め、htmlの<title>タグの中身(つまりページのタイトル)と一緒に表示する」というロジックです。htmlのparse</title>…
最近、スクレイピングで記事を集めることにハマっているのですが、その記事の中に含まれるトピックなり特徴語なりを簡単にチェックする方法はないかと悩んでました。 例えば、音楽ナタリーから好きなバンドの記事を集めてくる際には、関連リンクのタグを取っ…
就職して1年も経つと多少は忙しくなってしまいます。つまり、しっかりと意識して自分自身の勉強や趣味の時間を確保する必要があります。 そのため、Twitterについても今までのようにだらだらとタイムラインを眺めるような使い方はできなくなり、 Twitter業務…
同期から共有してもらったのですが、『PythonによるWebスクレイピング講習会』というイベントが10/13(火)・10/19(月)に開催されるそうです。 [講習会]PythonによるWebスクレイピング講習会(要申込・全2回)を、10/13(火)・10/19(月)16:30~19…
これの続きです kiito.hatenablog.com import csv import time import urllib.request from bs4 import BeautifulSoup # 年月日を作成 years = range(2010,2016) months = range(1,13) days = range(1,32) dates = [[c,m,d] for c in years for m in months …