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