ゆるふわめも

東京か京都にいます。

pythonでウェブサイトをクロールしてページの説明を収集する

やること

ページの文章からトピックモデルを作って、ウェブの移動履歴や購入履歴からユーザの特徴ベクトルを作りたい。 その初めの一歩として、とりあえず url の一覧からページの説明を取得してcsvに保存しときたい。

コード

import numpy as np
import pandas as pd
import seaborn as sb
import urllib2, time
from BeautifulSoup import BeautifulSoup
import matplotlib.pyplot as plt;plt.style.use('ggplot')

pagedata = loaddata() # pagedata = [ページ名、アドレスのデータ]
data = []

for (name, address) in np.array(pagedata):
    time.sleep(1.0)
    
    try:
        urls = address
        html = urllib2.urlopen(urls).read()
        soup = BeautifulSoup(html)
        desc = soup.findAll(attrs={"name":"description"})[0]['content'].encode('utf-8')
        data += [(name, address, desc)]

    except:
        desc = ''
        data += [(name, address, desc)]
        print (name, address, desc)
        
    if i%10==0:
        print (name, address, desc)
        print('..save', i, pagedata.shape)
        savedata = pd.DataFrame(data)
        savedata.columns = ['name', 'adress', 'desc']
        savedata.to_csv('site_descriptions.csv', sep='\t')

とりあえず 10ステップごとにデータを保存しておくことにした。 soup.findAll(attrs={"name":"description"})[0]['content'].encode('utf-8')の箇所さえ書き換えたり追加したりしたらいくらでも適当にデータを集めてくることができる。

Scrapy | A Fast and Powerful Scraping and Web Crawling Framework

上記のScrapyを使ってやるのが正当な手法っぽいけどとりあえずページタイトルだけ集められたらよかったのでこれで保留。

集めたテキストを形態素解析する

paper.hatenadiary.jp