Crawling
2022. 3. 24. 18:34ㆍPython
- 크롤링 진행 순서
1. url정의
2. requsts로 url에 정보요청
3. 정보를 html 변환 (보기 쉽게)
4. html 내에서 뉴스헤더 선별
BeautifulSoup 사용
- requests는 요청을 받기는 하지만 text로만 받음
- API는 통신을 위해 정형화 된 데이터 형태의 text
- 우리가 원하는 데이터로 가공하기 위해 편의상 html로 변환
- text를 html로 변환하는 모듈이 beautifulSoup
import requests # 크롤링에 사용하는 패키지
# 컴퓨터간 통신을 위한 여러가지 기능들을 파이썬으로 제어할 수 있도록 하는 패키지
from bs4 import BeautifulSoup # html 변환에 사용함
url = ' 크롤링 하고 싶은 페이지 url '
rep = requests.get(url)
html = BeautifulSoup(rep.text , 'html.parser')
html.select(' html내에서 보고 싶은 정보만 선별 ')
- 코드 결과 해석
# 100 우리 이런정보 내주는거야
# 200 성공
# 300 우리 이 사이트 이리루 이사했어 일루가
# 400 유저가 요청을 잘못한경우
# 500 서버 문제
태그 클래스 접근시 'tag'.'class'
셀렉터
- 조합 셀렉터
태그 이름이 span이고 클래스 이름은 txt인 라인을 찾고 싶다. : span.txt
li 태그 중에서 id가 name 인 라인을 찾고\ 싶다. : li#name
- 경로 셀렉터
<ul>
<li><span>이걸 찾으려면?</span></li>
</ul>
<span>이건 아님</span>
ul 태그안 li 태그 안 span 라인을 찾는다
ul > li > span 혹은 ul li span
Key
- 차단막는 코드
seed = np.random.randint(100) # 무작위 정수 뽑아줌 -> 숫자가 시작되는 시작 포인트
np.random.seed(seed)
a = np.random.randint(5) # 무작위 시드에서 무작위 정수를 뽑음
time.sleep(a)
- 실습 예제
# 네이버 메인페이지
# url정의
url = 'https://naver.com'
# requsts로 url에 정보요청 (엔터 역할)
rep = requests.get(url)
# 정보를 html 변환 (보기 쉽게)
html = BeautifulSoup(rep.text , 'html.parser')
# html 내에서 우리가 보고 싶은 정보만 선별
html.select('img')
# 다음 뉴스 페이지 크롤링
# url정의
url ='https://news.daum.net/'
# requsts로 url에 정보요청
rep = requests.get(url)
# 정보를 html 변환 (보기 쉽게)
html = BeautifulSoup(rep.text , 'html.parser')
# html 내에서 뉴스헤더 선별
## html.select('a.link_txt')[0].text.strip()
for news in html.select('a.link_txt')[:-13]:
print(news.text.strip())
# url 설정
url = 'https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=로또'
# requests로 데이터 요청하기
rep = requests.get(url)
# html로 변환
html = BeautifulSoup(rep.text, 'html.parser')
# 데이터 선별
for lotto_num in html.select('span.ball')[:-2]:
print(lotto_num.text)# bg_ball1')
- 회차별 크롤링 (로또)
lotto = []
# 1회차부터 10회차에 해당하는 로또넘버를 가져와 보겠습니다.
for i in range(1, 11):
print(f'{i}회차 크롤링 중입니다.')
seed = np.random.randint(100) # 무작위 정수 뽑아줌 -> 숫자가 시작되는 시작 포인트
np.random.seed(seed)
a = np.random.randint(5) # 무작위 시드에서 무작위 정수를 뽑음
time.sleep(a)
url = f'https://search.daum.net/search?w=tot&DA=LOT&rtmaxcoll=LOT&&q={i}회차%20로또'
rep = requests.get(url)
if rep.status_code == requests.codes.ok:
html = BeautifulSoup(rep.text, 'html.parser')
for lotto_num in html.select('span.ball')[:-2]:
lotto.append(lotto_num.text)
else:
print(f'{i}회차 크롤링이 실패했습니다.')
pass
print('크롤링 완료!')
# 데이터 선별
lotto= np.array(lotto).reshape(-1,6)
lotto
sns.countplot(lotto)
df = pd.DataFrame(lotto,
index=[f'{i}회'for i in range(1,11)])
df
'Python' 카테고리의 다른 글
빅분기 실기 Chapter2 (0) | 2022.06.07 |
---|---|
빅분기 실기 Chapter1 (0) | 2022.06.07 |
Pandas 함수 (0) | 2022.03.23 |
Visualization - Matplotlib (0) | 2022.03.23 |
Class (0) | 2022.03.21 |