파이썬으로 스크래핑 된 테이블을 CSV에 저장하는 방법

이 기사에 대하여



연구에서 웹 페이지에있는 테이블을 스크래핑해야했기 때문에 그 때 사용한 파이썬 프로그램을 소개합니다. 덧붙여서, 자신은 스크래핑 경력 0 이었기 때문에 여러가지 조사하면서 만들어 갔습니다만, Web 페이지상의 표를 HTML화한 후에 HTML의 표 부분을 CSV화하는 방법까지 설명하고 있는 것이 거의 없었다 그래서이 기사를 썼습니다.

소개



스크래핑에 대한주의 사항은 아래 URL에서 확인하십시오.
htps : // 코 m / 아즈 짱 1111 / ms / b161b998790b1db22f7

파이썬으로 스크래핑



전체 프로그램은 여기에 있습니다.

import


import csv
import urllib
from bs4 import BeautifulSoup

가져온 라이브러리 설명
CSV는 파이썬 표준 라이브러리이며, 이번에는 CSV 파일을 쓰는 데 사용됩니다.
· urllib은 웹의 데이터 (HTML)에 액세스하고 검색하는 데 사용됩니다.
· BeautifulSoup은 HTML에서 목표로하는 데이터를 추출하는 데 사용됩니다.

HTML 가져오기




url = "https://en.wikipedia.org/wiki/List_of_cities_in_Japan"
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
# HTMLから表(tableタグ)の部分を全て取得する
table = soup.find_all("table")

이번에는, 일본의 도시에 대해 정리하고 있는 wikipedia의 표를 스크래핑 해 보겠습니다.

프로그램의 urllib.request.urlopen은 지정된 url의 HTML을 가져옵니다. 그런 다음 Beautiful Soup을 사용하여 다루기 쉽도록 성형하고, HTML에서 테이블이있는 부분 (table 태그로 둘러싸여있는 부분)을 모두 soup.find_all ( "table")로 취득하면 준비가 완료됩니다.

가져오려는 TABLE 태그의 이름 확인





chrome 브라우저를 사용하는 분은 F12(mac라면 command+option+I)를 눌러 개발자 툴(스크린샷의 검은 화면)에 들어갈 수 있습니다. 그런 다음 Elements에서 HTML 소스 코드를 볼 수 있으므로 그 중에서 스크래핑하고 싶은 table 태그를 찾습니다. 이번에는 청색으로 선택된 표를 얻고 싶습니다. 사실 이것은 단순히 모든 테이블 태그에서 className이 "wikitable"인 것을 선택하여 얻을 수 있습니다.
for tab in table:
    table_className = tab.get("class")
    print(table_className)
    if table_className[0] == "wikitable":
        break

# break文がないときの出力結果
# ['vertical-navbox', 'nowraplinks', 'hlist']
# ['wikitable'] <- ここで,break文を使って抜ける
# ['wikitable', 'sortable']
# ['wikitable', 'sortable']
# ['wikitable']
# ['nowraplinks', 'mw-collapsible', 'autocollapse', 'navbox-inner']

· table_className [0]은 className의 시작 부분에 위키 테이블이 있기 때문입니다.
· 또, 이번의 경우, HTML상에서 그 밖에도 wikitable와 같은 이름의 테이블이 복수 존재하고 있습니다만, 이번 원하는 테이블은 항상 최초의 wikitable이므로 처음으로 if문을 통과한 후, 곧바로 break문을 사용해 루프를 빠지는 처리를 넣고 있습니다.

원하는 테이블을 꺼낼 수 있으면 CSV로 변환하여 저장합니다.



마지막으로 위 프로그램에 CSV 저장 기능을 추가합니다.
for tab in table:
    table_className = tab.get("class")
    if table_className[0] == "wikitable":
        # CSV保存部分
        with open("test.csv", "w", encoding='utf-8') as file:
            writer = csv.writer(file)
            rows = tab.find_all("tr")
            for row in rows:
                csvRow = []
                for cell in row.findAll(['td', 'th']):
                    csvRow.append(cell.get_text())
                writer.writerow(csvRow)
        break

CSV 저장 기능의 부분은 table 태그를 행 방향("tr")으로 빼내어 열 방향("td", "th")으로 꺼내 list 형식으로 append하여 CSV로 저장한다는 것입니다(table 태그까지 빼낼 수 있으면, 여기는 copipe로 사용해 좋다고 생각한다).

확인을 위해 pandas를 사용하여 CSV를 표시합니다.


import pandas as pd
pd.read_csv("test.csv")



무사히, csv저장한 것이 pandas에 의해 표시할 수 있었습니다!

요약



스크래핑하고 싶은 사이트에 의합니다만, 대체로 이 흐름으로 표를 CSV로 취득할 수 있다고 생각합니다! 여기까지 봐 주셔서 감사합니다~!

참고문헌

좋은 웹페이지 즐겨찾기