Pythonで総選挙データのスクレイピング

データのスクレイピング

AKB48総選挙データのスクレイピング

import csv
from urllib.request import urlopen

from bs4 import BeautifulSoup

url = 'http://www.akb48.co.jp/sousenkyo_45th/result.php'
html = urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

with open('akb48.csv', 'w') as fw:
    writer = csv.writer(fw, dialect='excel', lineterminator='\n')

    # ヘッダー
    writer.writerow(['rank', 'akb_names', 'akb_count'])
    
    for i in soup.select('#main_area > div.frameFix > div > ul > li'):

        # 順位 前後の「第位」を削除=>数値化
        rank = int(
            i.select_one('p.result_rank').get_text(strip=True).strip('第位'))

        # 得票数 後の「票」を削除=>カンマ削除=>数値化
        count = int(
            i.select_one('p.result_count').get_text(
                strip=True).rstrip('票').replace(',', ''))

        # 名前
        name = i.select_one('h4.result_name').get_text(strip=True)

        writer.writerow([rank, name, count])

2017年総選挙データ(東京)のスクレイピング

from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv

url = 'http://www.asahi.com/senkyo/senkyo2017/kaihyo/A13.html'
html = urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')

with open('hr2017_tokyo.csv', 'w') as fw:
    writer = csv.writer(fw, dialect='excel', lineterminator='\n')

    # ヘッダー
    writer.writerow(
        ['num', 'name', 'age', 'count', 'party', 'status', 'previous'])

    for num, i in enumerate(
            soup.select('div.areabox > table > tbody > tr'), start=1):

        # 姓
        sei = i.select_one('td.namae > div > span.sei').get_text(strip=True)

        # 名
        mei = i.select_one('td.namae > div > span.mei').get_text(strip=True)

        # 年齢
        age = int(
            i.select_one('td.namae > div > span.age').get_text(
                strip=True).strip('()'))

        # 得票数
        count = int(
            i.select_one('td.num > div').contents[0].strip().replace(',', ''))

        # 政党
        party = i.select_one('td.party > div').get_text(strip=True)

        # 新旧
        status = i.select_one('td.status > div').get_text(strip=True)

        # 当選回数
        previous = int(
            i.select_one('td.tosenkaisu > div').get_text(
                strip=True).rstrip('回'))

        writer.writerow(
            [num, sei + ' ' + mei, age, count, party, status, previous])