※ 웹 크롤링
■ Pandas 활용 / 표 형태 데이터 크롤링
# 사용 예시
> url = 'https://…'
> table_df_list = pd.read_html(url, encoding = 'euc-kr')
> table_df = table_df_list[3]
> import FinanceDataReader
> kospi = FinanceDataReader.StockListing('KOSPI')
> kospi_info_list = []
> for code in kospi['Code'][:10]:
url = f'https://…code={code}'
table_df_list = pd.read_html(url, encoding = 'euc-kr')
table_df = table_df_list[3]
kospi_info_dic = {}
kospi_info_dic['code'] = code
kospi_info_dic['table'] = table_df
kospi_info_list.append(kospi_info_dic)
> print(kospi[0]['code'])
> print(kospi[0]['table'])
■ BeautifulSoup 활용
- 파이썬으로 웹 서버 정보 요청 후 HTML 가져오기
- 데이터 파싱
- 정보 저장
# 사용 예시
> import requests
> from bs4 import BeautifulSoup as bs
> keyword = '제주도'
> url = f'https://…query={keyword}'
> res = requests.get(url)
> res # <Response [200]>
> soup = bs(res.text, 'html.parser')
> soup # html 코드를 가져옴
> soup.find_all('a', class_ = 'title_link') # 해당 요소를 가진 모든 정보를 찾음
> soup.find_all('a', class_ = 'title_link')[0] # 첫 번째 블로그의 html 정보
> soup.find_all('a', class_ = 'title_link')[0].text # 첫 번째 블로그의 html 정보 중 텍스트 출력
> soup.find_all('a', class_ = 'title_link')[0]['href'] # 첫 번째 블로그의 블로그 주소
"""
> a = []
> for idx in range(len(soup.find_all('a', class_ = 'title_link'))):
a.append(soup.find_all('a', class_ = 'title_link')[idx].text)
"""
> title = [idx.text for idx in soup.find_all('a', class_ = 'title_link')]
> date = [idx.text for idx in soup.find_all('span', class_ = 'sub')]
> content = [idx.text for idx in soup.find_all('a', class_ = 'dsc_link')]
> df.DataFrame({'title' : title, 'date' : date, 'content' : content})
> from user_agent import generate_user_agent, generate_navigator
> from tqdm.notebook import tqdm
> import time
> article_list = []
> for i in tqdm(range(1, 101)):
try:
url = f'https://m.land.naver.com/~pages={i}'
user_agent = generate_user_agent()
headers = {'User-Agent' : user_agent}
res = requests.get(url, headers = headers)
time.sleep(1)
article_json = res.json()
article_body = article_json['body']
article_list.append(article_body)
except:
break
> article_list[0][0]
> article_list1 = [j for i in article_list for j in i]
댓글남기기