「プログラマが知るべき97のこと」をスクレイピング

プログラマが知るべき97のこと」が無料公開されている.

法的に大丈夫なのか心配になるサイトだけど,少なくともライセンス上は問題がないようだ.

ライセンス上は問題がないとはいえ,いつ消滅するかわからないサイトなので, スクレイピングしてテキストとして保存しておいた.

スクレイピングするスクリプトを貼り付けておく. python2.7でpip install beautifulsoup4 requestsさえしておけば動作するはずだ.

import time
import os
import requests
from bs4 import BeautifulSoup

output_dir = "./text"
url = "http://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4"

def isessay(url):
    return url.startswith('/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/')

def parse_content(content):
    soup = BeautifulSoup(content)
    num = soup.find(id='postNumber').text
    title = soup.title.text
    author = soup.find(itemprop='author').text
    text = soup.find(id='postBody').text
    rtitle = u"{0} - {1}".format(num, title)
    rtext = u"""{0}: {1} - {2}
    {3}""".format(num, author, title, text)
    return (rtitle, rtext)


r = requests.get(url)
soup = BeautifulSoup(r.text.encode(r.encoding))
essays = [x.get('href') for x in soup.find_all('a') if isessay(x.get('href'))]

if not os.path.exists(output_dir):
    os.makedirs(output_dir)

for url in essays:
    url = "http://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/{0}".format(url)
    r = requests.get(url)
    content = r.text.encode(r.encoding)
    title, text = parse_content(content)
    path = u"{0}/{1}.txt".format(output_dir, title)
    print(u"write to {0}".format(path))
    with open(path, 'w') as f:
        f.write(text.encode('utf-8'))
    time.sleep(3)