CrawlingIndustryReport - GachonCapstoneTeam/TTS_JAVA GitHub Wiki
๐ Crawling - Indusry Report
Industry Report Crawling
๋ค์ด๋ฒ ๋ฆฌํฌํธ์์ ์ ๊ณตํ๋ ์ฐ์
๋ถ์ ๋ฆฌํฌํธ
์ ๋ํ ๋ด์ฉ์ ํฌ๋กค๋ง ํ ๊ฒ์ผ๋ก, ์ฐ์
๋ถ์ ๋ฆฌํฌํธ์ ํ๋ฉด ๊ตฌ์ฑ์ ๋ง์ถฐ์ ํฌ๋กค๋ง์ ์งํํ๊ธฐ ์ํ ์ฝ๋์
๋๋ค. BeautifulSoup
์ ์ฌ์ฉํ์ฌ ํฌ๋กค๋งํ์์ผ๋ฉฐ, ํฌ๋กค๋ง๋ ๋ฐ์ดํฐ๋ mongoDB
์ ์ ์ฅ๋ฉ๋๋ค.
โ ์ฃผ์ ๊ธฐ๋ฅ ์์ฝ
๊ธฐ๋ฅ | ์ค๋ช |
---|---|
์ฐ์ ๋ถ์ ๋ฆฌํฌํธ ํฌ๋กค๋ง | ๋ค์ด๋ฒ ์ฆ๊ถ ์ฐ์ ๋ถ์ ๋ฆฌํฌํธ์ ๋ฆฌ์คํธ ํ์ด์ง๋ฅผ ์ํํ๋ฉฐ ์ ์ข ๋ช , ์ ๋ชฉ, ์์ฑ์ผ, ์์ฝ, PDF ๋ฑ ์ฃผ์ ์ ๋ณด๋ฅผ ์์ง |
PDF ๋ด์ฉ ์ถ์ถ | ๊ฐ ๋ฆฌํฌํธ์ ํฌํจ๋ PDF ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ํ ์คํธ ๋ด์ฉ์ ์ถ์ถํ์ฌ ์ ์ฅ |
HTML ๋ณธ๋ฌธ ๋ด์ฉ ์์ง | ๋ฆฌํฌํธ ์์ธ ํ์ด์ง์์ HTML ํํ์ ๋ณธ๋ฌธ ํ ์คํธ๋ฅผ ์ถ๊ฐ๋ก ์์ง |
์ฆ๊ถ์ฌ ํํฐ๋ง | pdf.SECURITIES_CONFIGS ๋ชฉ๋ก์ ํฌํจ๋ ์ฃผ์ ์ฆ๊ถ์ฌ ๋ฆฌํฌํธ๋ง ํฌ๋กค๋ง ๋์์ ํฌํจ |
MongoDB์ ์ ์ฅ | ํฌ๋กค๋ง๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ MongoDB ์ปฌ๋ ์ ์ ์ ์ฅํ์ฌ ๋ถ์ ๋ฐ ์กฐํ์ ํ์ฉ ๊ฐ๋ฅ |
๐ง ์ฃผ์ ๋ก์ง ์ค๋ช
์ ์ฒด ๋ฆฌํฌํธ ํฌ๋กค๋ง ๋ฐ ์ ์ฅ - fetch_industry_reports()
def fetch_industry_reports(category_name, category_url, pages)
- ์ฐ์ ๋ถ์ ๋ฆฌํฌํธ๋ฅผ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์์งํ์ฌ ์ข ๋ชฉ๋ช , ์ฆ๊ถ์ฌ, ์ ์ข , ๋ณธ๋ฌธ ๋ด์ฉ ๋ฑ์ ํฌํจํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ
for page in range(1, pages + 1):
url = f"{category_url}?&page={page}"
...
- ์ฃผ์ด์ง ํ์ด์ง ์๋งํผ ๋ฐ๋ณตํ์ฌ, ๊ฐ ๋ฆฌํฌํธ ๋ฆฌ์คํธ ํ์ด์ง๋ฅผ ์์ฐจ์ ์ผ๋ก ์์ฒญํ๊ณ ํ์ฑ
if not table:
print(f"Table not found for URL: {url}")
continue
- ํ ์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ํ์ด์ง๋ ๊ฑด๋๋
for row in table.find_all("tr")[2:]:
...
- ํค๋๋ฅผ ์ ์ธํ ์์์์ ๋ฆฌํฌํธ ์ ๋ณด๋ฅผ ์ถ์ถ
stock_link = cols[0].find("a", class_="stock_item")
if stock_link:
item_name = stock_link.text.strip() # ์ข
๋ชฉ๋ช
code = stock_link["href"].split("=")[-1] # ์ข
๋ชฉ ์ฝ๋
else:
item_name = cols[0].text.strip()
code = None # ์ฝ๋ ์ ๋ณด ์์
- ์ฐ์ ๋ถ์ ๋ฆฌํฌํธ๋ ์ข ๋ชฉ์ ๋ฐ๋ฅธ ๋ฆฌํฌํธ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋ฐ๋ก ์์
item_name = cols[0].text.strip() # ์ฌ๊ธฐ์ item_name์ ์
์ข
๋ช
์ด๋ฏ๋ก '์
์ข
'์ ์ ์ฅ
title = cols[1].text.strip()
detail_link = cols[1].find("a")["href"]
detail_url = f"https://finance.naver.com/research/{detail_link}" if not detail_link.startswith(
"http") else detail_link
company = cols[2].text.strip() # ์ฆ๊ถ์ฌ
- ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋๋ฐ ํ์ํ ์ ๋ณด๋ค์ ํฌ๋กค๋ง
pdf_content = "" if pdf_url == "PDF ์์" else pdf.download_and_process_pdf2(pdf_url,company)
report_content = fetch_report_details(detail_url)
- PDF URL์ด ์กด์ฌํ ๊ฒฝ์ฐ ํด๋น PDF๋ฅผ ๋ค์ด๋ก๋ํ์ฌ
download_and_process_pdf2
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ก ๋ณํ - HTML ๋ฆฌํฌํธ ๋ณธ๋ฌธ๋ ํจ๊ป ์์ง
reports.append({
'Category': category_name,
'์ข
๋ชฉ๋ช
': "", # ์ฐ์
๋ถ์ ๋ฆฌํฌํธ๋ ์ข
๋ชฉ๋ช
์ ๋น์๋
'์
์ข
': item_name, # item_name์ ์
์ข
์ผ๋ก ์ ์ฅ
'Title': title,
'์ฆ๊ถ์ฌ': company,
'PDF URL': pdf_url,
'์์ฑ์ผ': date,
'Views': views,
'Content': report_content,
'PDF Content': pdf_content,
})
})
- ํ๋์ ๋ฆฌํฌํธ๋ฅผ ๋์ ๋๋ฆฌ ํํ๋ก ๊ตฌ์ฑํ๊ณ , ์ ์ฒด ๋ฆฌ์คํธ์ ์ถ๊ฐ
๐ ๊ด๋ จ ๋ ํ์งํ ๋ฆฌ
- TalkStock-BE ํ๋ก์ ํธ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ
crawling.py
: ์ข ๋ชฉ๋ถ์ ๋ฆฌํฌํธ ํฌ๋กค๋ง ์ฝ๋