相変わらずめちゃめちゃ湿度高くて暑いですねコニャチワワorz
湿度高いと汗疹できるからツライー・・・。
先週末の話ですが。
調べ物のためにあっちのページのPDF, こっちのページのPDFをぽちぽちダウンロードしてたんす。
・・・量が多い(=ω=)
右クリック→「リンク先を名前をつけて保存」
このアクションが1つや2つならいいけど、5つ6つ7つとかなってくるとひたすら面倒くさい。
ダウンロード専用ツールを探して、インストールして、使い方調べt・・・これまた面倒くさい。
なんかないか。・・・ないか(=ω=)。
じゃあ作ってしまえホトトギス。
→→作った。
名前は PyCherryPick にしました。
この名前、なんかエロいね(*・∀・*)
※ちなみにcherrypickってのは英語で「つまみ食い」って意味w
ソースコードはコチラ
github: https://github.com/wgkoro/PyCherryPick
ちなみにコマンド実行するとこうなります↓ (各画像クリックで拡大)
ページから欲しいファイルを抜き出して、自動ダウンロードします。
以下、使い方。
必須条件
・Python2.x
・BeautifulSoup (パッケージにバンドルしてあります)
Macの方はダウンロード後、コマンドラインたたけば使えるはず。デフォルトでPython入ってるので。
Windowsの方は、Pythonインストールしないとダメかな・・・。
基本的な使い方
基本的にコマンドラインで利用します。
本体(pycherrypick.py)があるディレクトリまで移動して
$ python pycherrypick.py [ターゲットのURL]
例:
$ python pycherrypick.py https://zafiel.wingall.com/archives/2011071715282121.php
これでhttps://zafiel.wingall.com/archives/2011071715282121.phpを走査し、リンク先が「jpg」のものを自動ダウンロードします。
オプション無し、URLのみ指定だと、jpgファイルのみ取ってきます。
これなんてエロ画像ダウンローダ?
応用 Options
コマンド実行時にオプションを指定すると、処理が色々変わります。
オプション一覧:
–version
バージョンを表示
-h, –help
このヘルプを表示
-f FILE, –file=FILE
ローカルのHTMLファイルのパス。
これが指定されているとローカルHTMLファイルを走査します。
もしURLと両方指定されている場合、ローカルを優先します。
-t TYPE, –type=TYPE
ダウンロードするファイルタイプを指定。pngファイルが欲しい場合はpngと指定します。
jpg,gif,png とカンマ区切りにすると複数タイプをまとめてダウンロードします。
-r オプション(正規表現)が指定されている場合、-t オプションは無視されます。
-i INTERVAL, –interval=INTERVAL
複数ファイルをダウンロードする際のインターバル(秒)を指定。デフォルトは2(秒)
-d DOWNLOAD, –download=DOWNLOAD
ダウンロードファイルの保存先を指定。(フルパスで指定)
デフォルトは、pycherrypick.pyのディレクトリにあるdownloadsフォルダに格納されます。
-e ENCODE, –encode=ENCODE
ターゲットとするページの文字エンコードを指定。
カスタムスクレイピングする場合以外は指定の必要はありません。
-u UA, –ua=UA
ファイルダウンロードする際のユーザーエージェント変更。デフォルトはIE8がセットされています。
-r REGEX, –regex=REGEX
ダウンロードするURLをフィルタする正規表現。
-t オプションも指定されている場合、
この-rオプションが優先され、-tオプションは無視されます。
例: -r ‘http.+\/.jpg’
例:pdfファイルが欲しい!
$ python pycherrypick.py https://zafiel.wingall.com/ -t pdf
例:pngとjpgファイル両方欲しい!
$ python pycherrypick.py https://zafiel.wingall.com/ -t jpg,png
例:pngとgifとpdfファイルを /Users/Foo/Downloads に保存したい
$ python pycherrypick.py https://zafiel.wingall.com/ -t png,gif,pdf -d /Users/Foo/Downloads
リンク先だけでなく、他のファイルも欲しい!
デフォルトは、リンク先のみを見ます。
例えばページに貼ってあるimgタグのsrcが欲しい場合は、カスタマイズしちゃって下さい。
クラスPyCherryPickを継承した新しいクラスを作り、scrape()をオーバーライドすれば楽かと思います。
PyCherryPick/python/custom_example.pyを参照して下さい。
custom_example.py
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pycherrypick import PyCherryPick
import re
class CustomExample(PyCherryPick):
def __init__(self):
PyCherryPick.__init__(self)
def scrape(self):
"""
新しいスクレイピング処理を書く。ダウンロード対象とするURLリストを返せばOK
imgタグを取得して、それぞれのパスを返す
"""
reg = re.compile(self.regex)
images = self.soup.findAll(‘img’)
results = []
for img in images:
try:
url = dict(img.attrs)[‘src’]
url = self._make_url_path(url)
if reg.match(url):
results.append(url)
except:
pass
print ‘Img tag scraping OK’
return results
if __name__ == ‘__main__’:
f = CustomExample()
f.main()
[/python]
使い方はこんな感じ(・∀・)
毎回urllib.open()とかBeautifulSoupでスクレイピング書いてもいいけどめんどくさいからね・・・。
これでファイル収集少しは楽になるかなー?
追記:
友人から「wgetでいいやん」ってつっこまれた。
wgetの機能がそんなに色々あると知らなかった・・・よ・・・ orz
ま、コード書く練習になったからいいとしよう(・ω・)
あ、ユーザーエージェント偽装できるのは強みか?w