pixivisionをスクレイピングしてslackに垂れ流した話。
どうもlinusです。
今回はbeautifulSoupでpixivisionをスクレイピングしてみました。
またそのスクレインピングしたものをslackのチャンネルで通知してくれるようにしてみました。
まず最初に作ったプログラミをかくと
# coding: UTF-8 import urllib2 from bs4 import BeautifulSoup # アクセスするURL url = "https://www.pixivision.net/ja/" UERAGENT = 'Mozilla/5.0' headers={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"} req = urllib2.Request(url, None,headers ) # URLにアクセスする htmlが帰ってくる html = urllib2.urlopen(req) # htmlをBeautifulSoupで扱う soup = BeautifulSoup(html, "html.parser") h2 = soup.find_all("h2") # 行き方のメモコピーから elm = soup.select("body > div.body-container > div > div.full-wide-container > article > div > div.aec__info-container > div.aec__title-container > h2 > a") row = elm.pop(0) print row.string print "https://www.pixivision.net/ja"+row.get("href")
殆ど下の方のをコピペしました。
けど上のurlの人と違う点は上の人はタグから探しているのですが私はselectというのを使ってcssの方から欲しいものを探す(?)ことにしました。 この
soup.select("body > div.body-container > div > div.full-wide-container > article > div > div.aec__info-container > div.aec__title-container > h2 > a")
っていうのが肝でこれで最新の記事がわかるようにしました。この()の中で探したいところの場所を指します。
やり方も簡単で 知りたいところを右クリックで検証押して コピーセレクトをするだけという楽さ しかしこれには重大な欠陥(?)があり urllibのせいなのわかりませんがpixivisionの英語方に行ってしまいました….
なので今度はpixivisionのrssの方でスクレイピングしようと 考え
# coding:utf-8 import urllib import urllib2 import requests from bs4 import BeautifulSoup def postSlack( channelCode, message): headers = {'content-type': 'application/x-www-form-urlencoded'} respons = requests.post('https://slack.com/api/chat.postMessage', data = urllib.urlencode({ 'token': "トークンの番号", 'channel': channelCode.encode('utf_8') , 'text': message.encode('utf_8') , 'username': u"トークンの名前".encode('utf_8') , 'icon_emoji': u"アイコン(顔文字ならいける)", 'unfurl_links': 'true', 'unfurl_media': 'true', }),headers = headers) print respons.text # RSSを取得する url = "https://www.pixivision.net/ja/rss" response = urllib2.urlopen(url) rss = response.read().decode("utf-8") # RSSからデータを抽出する soup = BeautifulSoup(rss, "lxml-xml" ) items = soup.find_all("item") item = items.pop(0) print(item.find("title").string) print(item.find("link").string) postSlack("slackのチャンネルのid", ""+item.find("title").string+item.find("link").string)
こうなりました。 またここではslackでのbotで自動的に送ってくれるようにしました。 これで苦労というか頑張ったところはpopというもの理解するところですかね?….
slackに送る方法はここを参考にさせてもらいました。
今回はここまでとしたいと思います。
今後の課題としては 1. pixivisinを直接からとっても日本語にしたい。
2.もっとpythonの知識を深めたい
3.これにrss昨日みたいに新しい記事が来たら通知してくれるようにしたい
と言ったところでしょうか?…..
あと、ここまで手助けしてくれた先輩から最近 下のような書物を貸していただいたのでそれに繋げられたらなぁーというのがあります。
あと他にこんなことができたら面白いんじゃね?みたいなのあったらコメント待ってます!
そのほか今回参考にしたサイト一覧