스크래핑한 데이터를 CSV에 저장해 보았다!

13178 단어 파이썬스크래핑

소개



최근 스크래핑에 대해 배우고 구현을 해 보았습니다. 이번에 작성한 것은 'CiNii Articles - 일본 논문 찾기 - 국립정보학연구소
스크래핑의 학습을 실시하는데 있어서 좋은 공부가 되었으므로 기사로 해 보았습니다. 스크래핑을 배우는 사람들에게 도움이되기를 바랍니다!

코드



다음은 자신이 만든 코드입니다. 설명에 관해서는 코드와 함께 쓰고 있으므로 그것을 봐 주시면 좋겠습니다. 또, 실제로 「CiNii Articles - 일본 논문 찾기 - 국립정보학연구소」의 사이트에 가서, Chrome의 검증 기능을 사용해 실제로 HTML의 구조를 보면서 실시하면 이해가 깊어진다고 생각합니다.
이번에 이 코드를 'search.py'로 저장했습니다.
import sys
import os
import requests
import pandas as pd
from bs4 import BeautifulSoup
import re


def main():
    url ='https://ci.nii.ac.jp/search?q={}&count=200'.format(sys.argv[1])
    res = requests.get(url)
    soup = BeautifulSoup(res.content , "html.parser")

    #検索件数を調べる。
    #textには'\n検索結果\n\t\n\t0件\n\t'こんな感じのデータが入っている。
    search_count_result = soup.find_all("h1" , {"class":"heading"})[0].text
    #正規表現を使用して検索件数を取得
    pattern = '[0-9]+'
    result = re.search(pattern, search_count_result)

   #検索結果がない場合はここで関数は終了
    search_count = int(result.group())
    if  search_count == 0:
        return print('検索結果はございません。')

    print('検索件数は' + str(search_count) + '件です。')

    #データを保存するディレクトリの作成。
    try:
        os.makedirs(sys.argv[1])
        print("新しいディレクトリが作成されました。")
    except FileExistsError:
        print("すでに存在しているディレクトリになります。")

    #すべての検索結果を取得する為、forの回数を取得する。
    #今回は200件ごとに表示を行うようにしたため200に設定しています。
    if search_count // 200 == 0:
        times = 1
    elif search_count % 200 == 0:
        times = search_count // 200
    else:
        times = search_count // 200 + 1


    #著者・タイトル・掲載媒体を一気に取得
    title_list = []
    author_list = []
    media_list = []

    #ここで空白文字の削除を行うための処理
    escape = str.maketrans({"\n":'',"\t":''})
    for time in range(times):

        #urlを取得
        count = 1 + 200 * time
        #search?q={}ここに検索したいキーワードが入ります。
        #count=200&start={} 200ごとにカウントし、何番目から表示するかを入力しています。
        url ='https://ci.nii.ac.jp/search?q={}&count=200&start={}'.format(sys.argv[1], count)
        print(url)
        res = requests.get(url)
        soup = BeautifulSoup(res.content , "html.parser")


        for paper in soup.find_all("dl", {"class":"paper_class"}):#1つの論文ごとにループを回す。

            #タイトルの取得
            title_list.append(paper.a.text.translate(escape))
            #著者の取得
            author_list.append(paper.find('p' , {'class':"item_subData item_authordata"}).text.translate(escape))
            #掲載媒体の取得
            media_list.append(paper.find('p' , {'class':"item_extraData item_journaldata"}).text.translate(escape))

    #データフレームにしてCSVで保存する。
    jurnal = pd.DataFrame({"Title":title_list , "Author":author_list , "Media":media_list})

    #文字化けを防ぐためにエンコーディングを行っている。
    jurnal.to_csv(str(sys.argv[1] + '/' + str(sys.argv[1]) + '.csv'),encoding='utf_8_sig')
    print('ファイルを作成しました。')
    print(jurnal.head())


if __name__ == '__main__':
    # モジュールを直接実行した時だけ、実行したいコード
    main()


구현해 보았다.



실제로 작성한 것을 구현해 보았습니다.
우선 터미널에 다음과 같이 넣습니다.
이번에는 기계 학습을 검색 키워드로 입력했습니다.
기계 학습이라는 곳에 자신이 검색하고 싶은 키워드를 입력하는 형태가 됩니다.
python search.py 機械学習

잘하면 다음과 같이됩니다.


CSV의 내용은 이런 형태가 됩니다.


마지막으로



어땠습니까?
나 자신 스크래핑 학습을 한 것은 3일 전 정도입니다만, 코드는 더러운 것의 실장만 하면 비교적 간단하게 실시할 수 있었습니다.
아직도 공부할 수도 있다고 생각하기 때문에 계속 노력하고 싶습니다.

좋은 웹페이지 즐겨찾기