orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

python

ElementTreeやlxmlで名前空間を含むXMLの要素を取得する

PythonでElementTreeやlxmlを使って名前空間つきのXMLから要素を取得しようとしても、思い通りに取得できないことがあります。これはよくあるハマりどころですが、あまりまとまった情報がないのでまとめておきます。 Python 3.6.0で検証しました。 目次: 解…

神戸Pythonの会でクローリングとスクレイピングについて話した

だいぶ日が経ってしまいましたが、神戸Pythonの会でクローリング・スクレイピングについて2回話してきました。 1回目はRequestsとBeautiful Soupを使った基本的なスクレイピングについて、2回目はHeadless Chromeを使ったスクレイピングについて話してきまし…

Pythonクローリング&スクレイピングの増刷が決まりました

おかげさまで売れ行き好調のようで、Pythonクローリング&スクレイピングの増刷が決まりました。 scraping-book.com 現在Amazonでは新品の紙の本が品切れで、在庫のステータスも表示されない状態になっていますが、2月1日以降は順次在庫が復活するとのことで…

RequestsとBeautiful Soupでのスクレイピング時に文字化けを減らす

多様なWebサイトからスクレイピングする際、Webサイトによっては文字化けが発生することがあります。 RequestsとBeautiful Soupを組み合わせる場合に、なるべく文字化けを減らす方法を解説します。 Beautiful Soupはパーサーを選択できますが、ここではhtml.…

PhantomJSとか使わずに簡単なJavaScriptを処理してスクレイピング

この記事はクローラー/Webスクレイピング Advent Calendar 2016 16日目の記事です。 JavaScriptが使われているWebページからスクレイピングする場合、PhantomJSなどのヘッドレスブラウザーを使うのが一般的です。 ただ、ちょっとしたJavaScriptを解釈できれ…

書籍を書きながらOSSに貢献した話

Pythonクローリング&スクレイピングでは、クローリング・スクレイピングやデータ解析のための様々なライブラリを紹介しています。 書籍でOSSのライブラリを紹介すると、そのライブラリに貢献する機会やインセンティブが生まれると考えています。 書籍で紹介…

「Pythonクローリング&スクレイピング」という本を書きました

2016-12-23更新: 電子書籍書籍版の情報を更新しました。電子書籍版も好評発売中です! Pythonを使ってクローリング・スクレイピングを行い、データを収集・活用する方法を解説した書籍です。 Pythonの基本から、サードパーティライブラリを使ったスクレイピ…

画像内の秘密情報をOCRでマスクするコマンドmasecretを作った

2017-02-05 更新 v0.2.0へのバージョンアップに伴って、使い方を更新しました。 スクリーンショットを撮影していると、しばしばマスクしておきたい値が存在します。数枚ならば手作業で塗りつぶしてもいいですが、手順書を作成するようなときは枚数が多くなっ…

Python 3をサポートしたScrapy 1.1が公開されました

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました!Scrapyについても1つの章を割いて解説しています。 Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発…

PythonでブログのHTMLから本文抽出 2015

2015-12-20 19:14追記: readabilityの説明を追加・修正しました。 Webページをクロールした時に、ざっくりと本文 (ページ内の重要なコンテンツ) のみを抽出できると便利です。 Google検索すると、特に日本語だとExtractContent以外の情報があまり見つかりま…

JavaScriptレンダリングサーバーSplashでスクレイピング

これはクローラー/Webスクレイピング Advent Calendar 2015の9日目の記事です。 本記事では、Scrapinghub社*1が開発しているSplashというオープンソースソフトウェアを紹介します。 github.com JavaScriptを使ったページからスクレイピングする方法としては…

Scrapy 1.0が公開されました

Pythonの有名なWebスクレイピングフレームワークのScrapyがバージョン1.0になりました。*1 0.24からの主要な変更点は下記のとおりです。 SpiderでItemの代わりにdictを返せるようになった Spiderごとにsettingsを設定できるようになった Twistedのloggingの…

LinuxディストリビューションにおけるPython 3デフォルト化の流れ

2015年6月2日修正:henrichさんのコメントを受け、Debianの記述を修正しました。 最近のLinuxディストリビューションにおいてPython 3がデフォルトになってきているという話をチラホラ聞くので、状況を調べてみました。 結論 PEP 394にディストリビューショ…

Webサイトのクローラビリティをチェックする

これはクローラー/スクレイピング Advent Calendar 2014の18日目の記事です。 Webサイトをクローリング、スクレイピングしたいと思ったとき、はじめに何をするでしょうか? 私はとりあえずブラウザの開発者ツールでDOMを覗きますが、その後robots.txtや利用…

クローラーをデーモンとして動かす ― Scrapyd

この記事はクローラー/スクレイピング Advent Calendar 2014の12日目の記事です。 ScrapyはPythonにおけるクローリング・スクレイピングのフレームワークとして有名ですが、Scrapydという興味深い機能があるので今日はこれを紹介します。 Scrapydはその名の…

Pythonでクローリング・スクレイピングに使えるライブラリいろいろ

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました! Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発売日: 2016/12/16メディア: 大型本この商品を含む…

#isucon 2014予選の延長戦をやってみた

予選の時間内では足りてないことばかりだったので、もう少し試行錯誤することにしました。 #isucon 2014の予選をほぼ一人で戦うハメになった話 - orangain flavor 目標は50000点、できれば60000点出したい。 予選終了時 Python実装 DBはRedisのみを使う Cook…

PyCon JP 2014に参加しました

2014年12月23日 編集:資料・動画の埋め込みは重かったのでリンクにし、いくつかの資料へのリンクを追加しました。 毎回行きたいと思いながらも用事があって行けなかったPyConに初めて参加しました。 感想 Kenneth Reitzさんによる1日目の基調講演は、言語、…

Python/FlaskアプリからOAuthでGitHub APIを使う

このようなサンプルが意外と見つからなかったので作りました。 GitHub API GitHubはWeb API を提供しており、リポジトリやユーザーなどをAPI経由で取得・操作することができます。 執筆時の2014年2月現在では、v3とbetaの2つのバージョンがあり、デフォルト…

PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる!

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました! Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発売日: 2016/12/16メディア: 大型本この商品を含む…

DjangoからMySQLにCOMMITしたデータが別のトランザクションから見えない

はじめに Djangoを使ったアプリケーションで、2つのバッチ処理用プロセスA、Bを同時に立ち上げたときに、Aのトランザクションでsave & commitした値をBでは読み取れないという問題に直面しました。 問題の箇所のソースコードはこのような感じです。 実行順 …

EvernoteのMarkdownをプレビューできるようにしたのでブログを引っ越した

2016-01-14追記: BaraagはEvernoteアプリの仕様変更により動かなくなっています。Markdownでメモをとるのにリアルタイムプレビューは重要でないことに気づき、筆者も使わなくなっているので、メンテナンスする予定もありません。ごめんなさい。 今まではてな…

Ubuntu Server 12.04.2 LTSでSkypeのボットを動かすまでの手順

はじめに 開発についてのミーティングをSkypeのチャットで行っていると、このチャットに外部からメッセージ送りたくなります。例えばJenkinsからの通知とか、アラートの受信とか。技術的にできることは知っているのですが、非GUIのサーバー環境で動かそうと…

Pythonでの文字列置換をマスターする

Pythonの文字列置換は、置換の仕方やバージョンによって利用すべきモジュールが異なっており、少しわかりにくいので、Python 2.xでのstrとunicode、3.xでのstrでの置換をまとめます。 文字列による単純な置換 (str.replace) str (2.x) / unicode / str (3.x)…

CentOS5.2にPython2.6+Django1.1+mod_wsgi3.1をインストール

なんかそこら辺に幾らでも情報がある内容だけど、ちょっとずつ情報が違って調べるの面倒なので未来の自分のために書いておく。 はじめに CentOS5.2にインストールされているPythonのバージョンは2.4.3で、古いからアップデートしたいと思ってもrpmが公開され…

Pythonでの普通の文字列とUnicode文字列の違い

Pythonで日本語を使おうとすると、エンコードの指定や''とu''の違いなどでよくわからなくなるので文字列型についての解説です。(よくわからなくなるのは自分だけと言う説もあります)なお環境はPython2.5ですが2.3以上なら変わらないと思われます。まず、Py…