일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Seaborn
- numpy
- pythonML
- 응시료
- 준비
- context manger1
- K 데이터 자격시험
- separating data(데이터 분리하기)
- teen learn
- 빅데이터 분석기사
- matplotlib
- 검정수수료
- List Comprehension
- 시험 일정
Archives
- Today
- Total
재원's 블로그
crawling3 (크롤링3) 본문
최초 작성일 : 2021-01-08
categories: Python
여기에 들어가서 '도시철도여객수송'의 데이터를 크롤링 해서 가져 오고
'DataFream' 형태로도 만드는 실습을 했다.
아래는 코드와 실행 화면들이다.
1. 스크래핑 요청
import requests
url = "http://www.kric.go.kr/jsp/industry/rss/citystapassList.jsp?q_org_cd=A010010021&q_fdate=2021"
html_text = requests.get(url).text
print(html_text)
홈페이지에 있는 내용을 그대로 가져왔다.
<실행 화면>
2. Parsing
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_text, "html.parser")
soup
<실행 화면>
3. Transformation
table_df = soup.find("table", class_="listtbl_c100")
print(table_df)
<실행 화면>
trs = table_df.find("tbody").find_all("tr")
trs[2]
<실행 화면>
tdcols = trs[1].find("td", {"class" : "tdcol"}) # '{}' 는 딕셔너리로 묶는다는 의미
print(tdcols)
<실행 화면>
tds = trs[4].find_all("td")
#print(tds)
tds[0].get_text(), tds[2].get_text(),tds[3].get_text()
<실행 화면>
tds[0].get_text(), tds[2].get_text(),tds[3].get_text()
<실행 화면>
trs[1:]
<실행 화면>
stationPass = []
for tr in trs[1:]:
dic = {}
tbs = tr.find_all("td")
# print("역:",tds[0].get_text())
# print("승차인원:",tds[2].get_text())
# print("승차인원:",tds[3].get_text())
dic["승차역"] = tds[0].get_text()
dic["승차인원"] = tds[2].get_text()
dic["하차인원"] = tds[3].get_text()
stationPass.append(dic)
print(stationPass)
<실행 화면>
import pandas as pd
pd.DataFrame(stationPass)
<실행 화면>
아래의 코드는 실행시키면 'csv'파일 이나 'xlsx(엑셀)' 파일이
생성되어 저장되고 홈페이지에서 가져온 데이터가 데이터 프레임 형태로
변환되는 코드이다.
import pandas as pd
import requests
from bs4 import BeautifulSoup
def main():
print("main function is executing....\n")
# 빈 데이터 프레임 생성
data_all = pd.DataFrame()
for i in range(1, 20):
url = "https://www.kric.go.kr/jsp/industry/rss/citystapassList.jsp?q_org_cd=A010010021&q_fdate=2021&pageNo=1"
html_text = fetch(url) # <----- 크게 신경 안써도 됨.
soup = parser(html_text) # <----- 크게 신경 안써도 됨.
df = transforming(soup) # <---- 수정
data_all = pd.concat([data_all, df])
print(data_all.head())
print(data_all.tail())
print(data_all.shape)
save_csv(data_all)
def fetch(url):
print("fetch function is executing....\n")
html_text = requests.get(url).text
print("html_text")
return html_text
def parser(text):
print("parser function is executing....\n")
return BeautifulSoup(text, "html.parser")
def transforming(soup):
tab = soup.find("table", {"class": "listtbl_c100"})
trs = tab.find("tbody").find_all("tr")
stationpassengers = []
if "합계" in trs[0].find("td", {"class":"tdcol"}):
for tr in trs[1:]:
dic = {}
tds = tr.find_all("td")
dic["station"] = tds[0].text
dic["ride"] = tds[2].text
dic["alright"] = tds[3].text
stationpassengers.append(dic)
# print(pd.DataFrame(stationpassengers))
data = pd.DataFrame(stationpassengers)
else:
for tr in trs:
dic = {}
tds = tr.find_all("td")
dic["station"] = tds[0].text
dic["ride"] = tds[2].text
dic["alright"] = tds[3].text
stationpassengers.append(dic)
# print(pd.DataFrame(stationpassengers))
data = pd.DataFrame(stationpassengers)
return data
def save(save_path, data):
data.reset_index(drop=False)
print(data.head())
# pip install openpyxl
data.to_excel(save_path + '/content/drive/MyDrive/crawling data/kric.csv', index = False, header=False, encoding='utf-8-sig')
def save_db(data):
## <-- DB 연동 예제 추가 할 코드
pass
if __name__ == "__main__":
main()
# 크롤링
# csv 파일 내보내기
# DB 연동
<실행 화면>
'Python' 카테고리의 다른 글
crawling basic (크롤링 기본) (0) | 2023.01.24 |
---|---|
crawlig2 (크롤링2) (0) | 2023.01.23 |
python def, decorator (0) | 2023.01.23 |
Missing value2 (결측치2) (0) | 2023.01.23 |
Missing value (결측치) (0) | 2023.01.23 |