linusの技術ブログのような何か

学生です プログラム(一応は)勉強中です  

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")

殆ど下の方のをコピペしました。

qiita.com

けど上の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というもの理解するところですかね?….

f:id:untilis:20170923003244p:plain

f:id:untilis:20170923003257p:plain

slackに送る方法はここを参考にさせてもらいました。

godan09.hatenablog.com

今回はここまでとしたいと思います。

今後の課題としては  1. pixivisinを直接からとっても日本語にしたい。

 2.もっとpythonの知識を深めたい

 3.これにrss昨日みたいに新しい記事が来たら通知してくれるようにしたい

と言ったところでしょうか?…..

あと、ここまで手助けしてくれた先輩から最近 下のような書物を貸していただいたのでそれに繋げられたらなぁーというのがあります。

Amazon CAPTCHA

あと他にこんなことができたら面白いんじゃね?みたいなのあったらコメント待ってます!

そのほか今回参考にしたサイト一覧

BeautifulSoupを使ってHTMLファイルからある文字列を含むリンクを抽出する - Qiita

PythonとBeautiful Soupでスクレイピング - Qiita