前作ったこれを改造したものです
だれでも、簡単に◯◯ちゃんかわいいと呟くことの出来るボタンを作ることができます。
どのように作るかと言いますと
まずしたのページにてボタンを作るボタンをクリックします
次に1つだけの入力フォームにかわいいと呟きたい相手の名前を入力します(ちゃんは自動的につくので気をつけてください)
大体は前回と同じなのですが、今回実装した面白いことを2つほど紹介したいと思います。
- 画像を自動的に取得してくる
- タイトル画像の自動生成
まず、1についてなのですが、NAVER画像で項目について検索をかけてそのレスポンスをスクレイピングするだけです。
ソースは以下のようになってます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding: utf-8 | |
from BaseCrawler import BaseCrawler | |
class CharactorImageCrawler(BaseCrawler): | |
METHOD = "GET" | |
COLLECTION = "kawaii" | |
def scraping(self, bs): | |
images_wrap = bs.find(attrs={"class": "MdImgList01"}); | |
return [img.attrs["src"] for img in images_wrap.find_all("img")]; | |
def save(self, result, db): | |
id = self.args[0]; | |
button = db.buttons.find_one({"_id": id}); | |
button["images"] = result; | |
db.buttons.save(button); | |
これは前回書いた記事のクローラファーム上で動いています
これで、画像のurlを取得して表示という流れです。
2つ目は文字列を受け取ってPILで処理して画像に変換! …と言いたいところですが…今回はインチキをしましたw
このロゴジェネレータさんを使ってまた、クローリングでかいけつしました。
パラメータをつけてPOSTで送ってやるだけなんですけどね!
少し、BaseCrawlerを書きなおして置かないとダメなところも出てきてしまったので。書きなおしたりもしてやりきりました。
以下はソースです
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding: utf-8 | |
from BaseCrawler import BaseCrawler | |
import urllib | |
IMAGE_BASE = "/Users/yuta/kawaiibutton/static/img/"; | |
URL = "http://www.simwebsol.com/imagetool/default.aspx" | |
PARAMS = { | |
"__VIEWSTATE":"/wEPDwUKMTkyNTg4NjcxNGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgQFDENoZWNrQm94Qm9sZAUOQ2hlY2tCb3hJdGFsaWMFEUNoZWNrQm94VW5kZXJsaW5lBQ5DaGVja0JveE1pcnJvcg18rZ9rSGcraW/bvvBz4HOk165Y", | |
"__EVENTVALIDATION":"/wEWQgL//9fYBwKIrpbVCwKk18beAgLDmcTeBwLBxpmqCQKA1PDuCQKj5Z/MBwKg5Z/MBwKPnbCmCwKYlrLYCgLCptDWCQKJkoXaAgL2tPoNAo7Lz8MDAsXUvfUFAsbUvfUFAsbUgfUFAsfUvfUFAsDUvfUFAsHUvfUFAsLUvfUFAtPUvfUFAuPs2OcLAp71uv0NArXelIoHAoC01MsPAr+dtuEBAvv+5/0OAp6aycQIAo3c+c0CArbN6DwCrpHy4wECv/Cs0QICvrb1jQgC053eiAQCnJm09AkC0c2DvQcC2JO5jw0C1OXN6gsC1fPT7AwCurDI+g4C87mFgwgC8cuS3QcC1OPW5wgCzZeeWALFnd0qArffxMoEAsOUgOgFAtnHsp4DAuOlkLEPArzG/oYGArrm7b0LAsnsxuEGAsjsxuEGAsaD7I8KAoS35PQBApq31PQBAqT2/6AGAqr2i6MGAqn2i6MGArz2i6MGAqT2w54NAtfr1uUEAqWAyNIKAs3rjuQEAsO0jM4BsnWHXjzsrpYv55NGnALvKvpt9jo=", | |
"TextBoxText":"見崎ちゃんかわいい", | |
"CheckBoxBold":"on", | |
"TextBoxBg":"#ffffff", | |
"TextBoxColorA":"#7fbce8", | |
"TextBoxColorB":"#4aa0e0", | |
"DropDownListFont":"Tahoma", | |
"DropDownListFontSize":"50", | |
"DropDownListMirror":"0.9", | |
"CheckBoxMirror":"on", | |
"DropDownListSimbol":"none", | |
"RadioButtonListPosition":"1", | |
"DropDownListDPI":"300", | |
"DropDownListType":"PNG", | |
"ButtonCreate":"Create Logo", | |
} | |
class LogoCrawler(BaseCrawler): | |
METHOD = "POST" | |
def __init__(self, url, params=None): | |
self.base_url = URL; | |
self.params = PARAMS; | |
def pre_crawling(self): | |
print self.args | |
self.params["TextBoxText"] = "%sちゃんかわいい" % self.args[1].encode("utf-8") | |
def pre_scraping(self, html): | |
pass | |
def scraping(self, bs): | |
image = bs.find(attrs={"id": "ImageLogo"}) | |
return image.attrs["src"]; | |
def save(self, result, db): | |
id = self.args[0]; | |
html = urllib.urlopen("http://www.simwebsol.com/imagetool/" + result[2:]); | |
f = open(IMAGE_BASE + str(id) + ".png", "w"); | |
f.write(html.read()); | |
if __name__ == '__main__': | |
LogoCrawler(URL, params=PARAMS).run(2, u"なでこ", method="POST") | |
色とかも弄れるのでパラメータが多いですね…
最近クローリングばっかりで問題解決してる気がするので。少し反省してちゃんとした解決方法も模索出来るようにして行きたいな〜と思っています。
0 件のコメント:
コメントを投稿