Python

2024.04.26

연을 2023. 4. 26. 17:35
728x90

[webcrawl을 만든다]

크롤링 하려면 넣어야 하는게 있는데

file→setting→python interpreter 의 beautifulsoup4 lxml을 install 해준다.

사진으로 보여주고싶은데 막힘...

 

[코드]

import urllib.request
from bs4 import BeautifulSoup

try:
    base_url="https://beomi.github.io/beomi.github.io_old"
    source_code=urllib.request.urlopen(base_url)

    plain_text=source_code.read()
    print(plain_text)
    print(type(plain_text))

    convert_data=BeautifulSoup(plain_text,'html.parser')
    print(convert_data)
    print(type(convert_data))

    for atag in convert_data.findAll('a'):
        print(atag.string)
except Exception as e:
    print('에러:',e)

[결과]

<class 'bs4.BeautifulSoup'>
None
나만의 웹 크롤러 만들기(4): Django로 크롤링한 데이터 저장하기
나만의 웹 크롤러 만들기(3): Selenium으로 무적 크롤러 만들기
Django에 Social Login 붙이기: Django세팅부터 Facebook/Google 개발 설정까지
Django에 Custom인증 붙이기
나만의 웹 크롤러 만들기(2): Login with Session
나만의 웹 크롤러 만들기 with Requests/BeautifulSoup
Celery로 TelegramBot 알림 보내기
Virtualenv/VirtualenvWrapper OS별 설치&이용법
[DjangoTDDStudy] #02: UnitTest 이용해 기능 테스트 하기
[DjangoTDDStudy] #01: 개발환경 세팅하기(Selenium / ChromeDriver)
[DjangoTDDStudy] #00: 스터디를 시작하며
Fabric Put 커맨드가 No Such File Exception을 반환할 때 해결법
CKEditor의 라이센스와 오픈소스 라이센스
ReactNative The Basis 번역을 끝냈습니다.
[React Native 번역]#01: 시작하기
[번역] 장고(Django)와 함께하는 Celery 첫걸음
Chrome Native Adblockr 대체하기
CustoMac 설치 분투기
Ubuntu14.04에 OhMyZsh 설치
Ubuntu14.04에서 pip로 mysqlclient 설치 실패시
Ubuntu14.04에서 Python3기반 virtualenvwrapper 설치
mac OS X에서 pip virtualenvwrapper 설치 시 uninstalling six 에서 Exception 발생 시
Fabric for Python3 (Fabric3)
Windows에서 pip로 mysqlclient 설치 실패시(python3.4/3.5)
맥에서 윈도RDP로 접속시 한영전환하기.
pip로 mysqlclient설치 중 mac os x에서 egg_info / OSError 발생시 대처방법

[find 함수]

종류 설명 사용 예
태그명 태그명으로 태그를 찾는다 find('a')
태그명, {속성명:값} 태그명 중에서 속성명:값으로 태그를 찾는다 find('div',{'class':'abc'})
find('div',{'id':'def'})
find('div',{'align':'center'})
태그명,속성명=값 태그명 중에서 속성명=값으로 태극를 찾는다.
위의 방법과 기능은 같고 표현 형식만 다르다
find(div,id='def')
find(div,my='good')
attrs=class 속성값 class 속성값을 기준으로 태그를 찾는다. find(attrs='abc')
태그명, class 속성값 특정 태그명의 class 속성값으로 찾는다. find('div','abc')
re.compile("정규표현식") 정규표현식에 해당하는 태그를 찾는다. find(re.compile("^b"))

[select]

조건 설명 사용 예
태그명 태그명으로 특정 태그를 찾는다. select_one('a')
.클래스명 임의의 태그 속성 중 클래스명으로 찾는다. select_one('.abc')
'#id명' 임의의 태그 속성 중 id명으로 찾는다.
(class명과 달리 id명은 중복 불가)
select_one('#abc')
태그명.클래스명 해당 태그의 클래스명을 찾는다. select_one('div.contents')
태그명#id명 해당 태그의 id명을 찾는다. select_one('div#header')
태그명[속성] 태그 안의 속성을 찾는다. select_one('a').attrs['href']
태그>자식태그 특정 태그에 포함된 자식태그를 조회하며,'>'로 구분한다. select_one('table>tr>td')
태그 자손태그 특정 태그에 포함된 자손 태그를 조회하며, 공백으로 구분한다. select_one('div span')

[코드] : copy의 copy selector를 누르면 f안에 있는 경로가 복사된다. 

import urllib.request
from bs4 import BeautifulSoup

try:
    base_url="https://finance.naver.com/sise/sise_market_sum.naver"
    source_code=urllib.request.urlopen(base_url)

    #text로 추출
    plain_text=source_code.read().decode('euc-kr')

    #돔형태로 추출
    convert_data=BeautifulSoup(plain_text,'html.parser')

    for n in range(2,7):
        pathstr=f'#contentarea>div.box_type_l>table.type_2>tbody>tr:nth-child({n})>td:nth-child(2)>a'
        name=convert_data.select_one(pathstr)
        pricestr=f'#contentarea>div.box_type_l>table.type_2>tbody>tr:nth-child({n})>td:nth-child(3)'
        price=convert_data.select_one(pricestr)
        print('회사명 ['+name.string+'] 오늘종가 ['+price.string+']')

except Exception as e:
    print('에러:', e)

[결과]

[한페이지를 다 출력하는 크롤링 코드]

import urllib.request
from bs4 import BeautifulSoup

try:
    base_url="https://finance.naver.com/sise/sise_market_sum.naver"
    source_code=urllib.request.urlopen(base_url)

    #text로 추출
    plain_text=source_code.read().decode('euc-kr')

    #돔형태로 추출
    convert_data=BeautifulSoup(plain_text,'html.parser')
    #2-7,10-15,18-23,74-79
    a=2
    b=7
    for i in range(10):
        for n in range(i*8 + 1, (i+1)*8 + 1):
            pathstr=f'#contentarea>div.box_type_l>table.type_2>tbody>tr:nth-child({n})>td:nth-child(2)>a'
            name=convert_data.select_one(pathstr)
            if name is None:
                continue
            pricestr=f'#contentarea>div.box_type_l>table.type_2>tbody>tr:nth-child({n})>td:nth-child(3)'
            price=convert_data.select_one(pricestr)
            print('회사명 ['+name.string+'] 오늘종가 ['+price.string+']')

except Exception as e:
    print('에러:', e)

[결과]

회사명 [삼성전자] 오늘종가 [64,100]
회사명 [LG에너지솔루션] 오늘종가 [567,000]
회사명 [SK하이닉스] 오늘종가 [87,400]
회사명 [삼성바이오로직스] 오늘종가 [783,000]
회사명 [LG화학] 오늘종가 [727,000]
회사명 [삼성SDI] 오늘종가 [703,000]
회사명 [삼성전자우] 오늘종가 [53,800]
회사명 [현대차] 오늘종가 [201,500]
회사명 [기아] 오늘종가 [85,700]
회사명 [POSCO홀딩스] 오늘종가 [371,500]
회사명 [NAVER] 오늘종가 [188,100]
회사명 [포스코퓨처엠] 오늘종가 [332,500]
회사명 [카카오] 오늘종가 [56,500]
회사명 [셀트리온] 오늘종가 [165,500]
회사명 [현대모비스] 오늘종가 [222,000]
회사명 [삼성물산] 오늘종가 [106,200]
회사명 [KB금융] 오늘종가 [48,950]
회사명 [신한지주] 오늘종가 [35,350]
회사명 [LG전자] 오늘종가 [108,400]
회사명 [SK이노베이션] 오늘종가 [177,500]
회사명 [LG] 오늘종가 [85,900]
회사명 [삼성생명] 오늘종가 [65,600]
회사명 [하나금융지주] 오늘종가 [42,050]
회사명 [SK] 오늘종가 [163,400]
회사명 [한국전력] 오늘종가 [18,420]
회사명 [KT&G] 오늘종가 [85,600]
회사명 [하이브] 오늘종가 [265,000]
회사명 [두산에너빌리티] 오늘종가 [17,100]
회사명 [삼성화재] 오늘종가 [225,000]
회사명 [카카오뱅크] 오늘종가 [22,200]
회사명 [SK텔레콤] 오늘종가 [47,500]
회사명 [삼성전기] 오늘종가 [139,100]
회사명 [고려아연] 오늘종가 [518,000]
회사명 [HMM] 오늘종가 [20,300]
회사명 [HD현대중공업] 오늘종가 [108,600]
회사명 [LG생활건강] 오늘종가 [617,000]
회사명 [크래프톤] 오늘종가 [190,700]
회사명 [메리츠금융지주] 오늘종가 [44,450]
회사명 [한화솔루션] 오늘종가 [53,100]
회사명 [삼성에스디에스] 오늘종가 [116,400]
회사명 [우리금융지주] 오늘종가 [11,750]
회사명 [S-Oil] 오늘종가 [75,800]
회사명 [대한항공] 오늘종가 [22,650]
회사명 [엔씨소프트] 오늘종가 [367,500]
회사명 [기업은행] 오늘종가 [10,070]
회사명 [KT] 오늘종가 [30,100]
회사명 [카카오페이] 오늘종가 [54,200]
회사명 [롯데케미칼] 오늘종가 [168,400]
회사명 [아모레퍼시픽] 오늘종가 [120,700]
회사명 [HD한국조선해양] 오늘종가 [86,500]
728x90