Guidelines

크둀링으둜 자료 쑰사 μžλ™ν™”ν•˜κΈ°

과제 λ˜λŠ” 자료 쑰사λ₯Ό μœ„ν•΄ 수천개의 νšŒμ‚¬ 정보 μ°Ύμ•„μ•Ό ν•˜λŠ” 상황!

인터넷 κ²€μƒ‰μœΌλ‘œ 수천개의 νšŒμ‚¬λ₯Ό 일일히 μ°Ύμ•„λ³΄λŠ” 것은 거의 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ 반볡적인 μžλ£Œμ‘°μ‚¬ μž‘μ—…μ— μ›Ή 크둀링을 μ‚¬μš©ν•˜λ©΄, ν•˜λ£¨ 쒅일 걸릴 μž‘μ—…μ„ λͺ‡ λΆ„ λ§Œμ— 끝낼 수 μžˆμŠ΅λ‹ˆλ‹€.

μ§€κΈˆλΆ€ν„° 5개의 νšŒμ‚¬μ—μ„œ 섀립연도와 μ°½μ—…μžλ₯Ό μ°ΎλŠ” 상황을 μ½”λ“œλ‘œ κ΅¬ν˜„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ½”λ“œκ°€ λ™μž‘ν•˜λŠ” 원리λ₯Ό 잘 μ΄ν•΄ν•˜λ©΄ 수백, 수천개의 νšŒμ‚¬ 정보λ₯Ό ν•œ λ²ˆμ— μˆ˜μ§‘ν•˜λŠ” 파이썬 ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


1. CSV 데이터 μ€€λΉ„

csv_dataλΌλŠ” λ¬Έμžμ—΄μ— νšŒμ‚¬ λͺ©λ‘μ„ μ €μž₯ν•©λ‹ˆλ‹€. 이 λ°μ΄ν„°λŠ” λ‚˜μ€‘μ— ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  CSV 파일처럼 λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒμΌμ„ μ‹€μ œλ‘œ μ €μž₯ν•˜μ§€ μ•Šκ³ , io.StringIOλ₯Ό μ‚¬μš©ν•΄μ„œ λ©”λͺ¨λ¦¬ μ•ˆμ—μ„œλ§Œ 이 데이터λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

자료 쑰사 λŒ€μƒ νšŒμ‚¬ λͺ©λ‘
1,Apple Inc. 2,Microsoft 3,NVIDIA 4,Berkshire Hathaway 5,Samsung

2. CSV 데이터 읽기

CSV 데이터λ₯Ό csv.DictReaderλ₯Ό μ‚¬μš©ν•΄ λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ μ½μŠ΅λ‹ˆλ‹€.

CSV의 각 행은 '번호', 'νšŒμ‚¬λͺ…'μ΄λΌλŠ” ν‚€λ₯Ό 가진 λ”•μ…”λ„ˆλ¦¬λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

CSV 파일 읽기
reader = csv.DictReader(csv_file)

3. νšŒμ‚¬λͺ…κ³Ό μœ„ν‚€ν”Όλ””μ•„ URL 맀핑

νšŒμ‚¬λͺ…에 따라 μœ„ν‚€ν”Όλ””μ•„ νŽ˜μ΄μ§€μ˜ URL을 μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€

예λ₯Ό λ“€μ–΄ 'Apple Inc.'λŠ” https://en.wikipedia.org/wiki/Apple_Inc.둜 λ³€ν™˜λ©λ‹ˆλ‹€.

νšŒμ‚¬λͺ…κ³Ό URL 맀핑
companies = {row['νšŒμ‚¬λͺ…']: base_url + row['νšŒμ‚¬λͺ…'] for row in reader}

μ΄λŸ¬ν•œ 과정을 톡해 각 νšŒμ‚¬μ˜ μœ„ν‚€ν”Όλ””μ•„ νŽ˜μ΄μ§€κ°€ companies λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯λ©λ‹ˆλ‹€.

νšŒμ‚¬λͺ…κ³Ό URL 맀핑 κ²°κ³Ό
{ 'Apple Inc.': 'https://en.wikipedia.org/wiki/Apple_Inc.', 'Microsoft': 'https://en.wikipedia.org/wiki/Microsoft', 'NVIDIA': 'https://en.wikipedia.org/wiki/NVIDIA', 'Berkshire Hathaway': 'https://en.wikipedia.org/wiki/Berkshire_Hathaway', 'Samsung': 'https://en.wikipedia.org/wiki/Samsung' }

4. μ›ΉνŽ˜μ΄μ§€μ—μ„œ 데이터 κ°€μ Έμ˜€κΈ°

각 νšŒμ‚¬μ˜ μœ„ν‚€ν”Όλ””μ•„ νŽ˜μ΄μ§€μ— μ ‘κ·Όν•΄ μ°½μ—…μžμ™€ 섀립연도 정보λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄ requests.get() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ URL에 μš”μ²­μ„ 보내고, BeautifulSoup으둜 HTML 데이터λ₯Ό νŒŒμ‹±(Parsing)ν•©λ‹ˆλ‹€.

νŒŒμ‹±(Parsing)μ΄λž€, HTML κ΅¬μ‘°μ—μ„œ ν•„μš”ν•œ 정보λ₯Ό μΆ”μΆœν•˜λŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€.

μ›ΉνŽ˜μ΄μ§€μ—μ„œ 데이터 κ°€μ Έμ˜€κΈ°
response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser')

5. μ°½μ—…μžμ™€ 섀립연도 μ°ΎκΈ°

μœ„ν‚€ν”Όλ””μ•„ νŽ˜μ΄μ§€μ˜ 정보 μƒμž(보톡 infobox라 λΆˆλ¦¬λŠ” ν…Œμ΄λΈ”)에 μ°½μ—…μžμ™€ 섀립연도 정보가 λ“€μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

이 μ½”λ“œλŠ” ν…Œμ΄λΈ”μ—μ„œ 'Founder'와 'Founded'λΌλŠ” ν…μŠ€νŠΈλ₯Ό μ°Ύμ•„ μ°½μ—…μžμ™€ 섀립연도 정보λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.

μ°½μ—…μžμ™€ 섀립연도 μ°ΎκΈ°
# ν–‰μ˜ 헀더 정보 μΆ”μΆœ header = row.find('th') # 헀더가 μ‘΄μž¬ν•˜κ³  'Founder'λΌλŠ” ν…μŠ€νŠΈκ°€ ν¬ν•¨λœ 경우 if header and 'Founder' in header.text: founder = row.find('td').text.strip() # 헀더가 μ‘΄μž¬ν•˜κ³  'Founded'λΌλŠ” ν…μŠ€νŠΈκ°€ ν¬ν•¨λœ 경우 if header and 'Founded' in header.text: founded = row.find('td').text.strip()

6. κ²°κ³Ό 좜λ ₯

μˆ˜μ§‘ν•œ μ°½μ—…μžμ™€ 섀립연도 정보λ₯Ό company_info λ¦¬μŠ€νŠΈμ— μ €μž₯ν•˜κ³ , λ§ˆμ§€λ§‰μ— 이 리슀트λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

κ²°κ³Ό 좜λ ₯
company_info.append({'νšŒμ‚¬λͺ…': company, 'μ°½μ—…μž': founder, '섀립연도': founded}) print(company_info)

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result