겉바속촉

[PYTHON] 파이썬_크롤링 본문

IT 일기 (상반기)/PYTHON

[PYTHON] 파이썬_크롤링

겉바속촉 2021. 1. 8. 16:48
728x90
반응형

 

안녕하세요

겉바속촉입니다

!^^!

 

 

!!파이썬 시작하기!!

 

 

 

 

파이썬을 활용해서

크롤링을

해보도록 하겠습니다

 

 

 

너무너무 기대되는

크롤링

!!!!

 

 

 

 

 

 

 


 

 

크롤링

 

 

 

명언 사이트 활용하려고 합니다  ^____^

 

 

https://quotes.toscrape.com/

 

Quotes to Scrape

 

quotes.toscrape.com

 

 

 

 

파이썬을 배우면서 크롤링을 빼놓을 순 없겠죠!!

 

 

1. 웹페이지를 가져올 줄 아는 것

2. html 코드내에서 필요로한 데이터를 추출해 올줄 아는 것

 

 

두가지가 중요합니다

 

 

F12 키를 눌러서 관리자 화면을 보도록할게요~

 

 

 

내부적으로 어떻게 되어있는지 코드들을 볼 수가 있습니다.

 

 

 

 

 

 

이런것들을 도와주는 것이 바로

 

BeautifulSoup

⇒ 웹 문서를 구성하는 HTML과 XML 문서에서 원하는 정보를 쉽게 추출할 수 있는 모듈을 모아 놓은 파이썬 패키지

 

 

 

 

 

우선 쉘에서 필요한 것들 설치

PS C:\python> python.exe -m pip install --upgrade pip
PS C:\python> pip install beautifulsoup4

 

 

 

다음과 같이 코드 작성했습니다:)

from bs4 import BeautifulSoup as bs
import urllib.request as req

# 웹 페이지(문서)를 가져와서 가공

url = 'https://quotes.toscrape.com/'
html = req.urlopen(url)
print(html)

 

 

url은 요런식인 거에요!!

 

 

 

 

그리고 실행시켜보니 객체가 출력되버리네요~

 

 

그래서 문자열로 읽어올게요:)

from bs4 import BeautifulSoup as bs
import urllib.request as req

# 웹 페이지(문서)를 가져와서 가공

url = 'https://quotes.toscrape.com/'
html = req.urlopen(url)
print(html.read())

 

 

오호...다음과 같이 나옵니다

 

 

그래서 이제 우리가 다루기 쉽게 바꿔주어야합니다.

코드 추가해서 실행

 

from bs4 import BeautifulSoup as bs
import urllib.request as req

# 웹 페이지(문서)를 가져와서 가공

url = 'https://quotes.toscrape.com/'
html = req.urlopen(url)
print(html.read())

print("*" * 100)
# 뷰티풀소프를 이용해서 피싱하기 좋은 상태로 변환
soup = bs(html.read(), 'html.parser')
print(soup)

 

근데 안되고 있습니다

 

 

이유가 뭘까요??

파일을 읽을 때에는 항상 파일 포인터가 있습니다.

 

파일을 읽으면 파일 포인터가 이동을 하는 데

다음 주석 처리한 저 print 명령으로 인해 이미 다 읽어버렸기 때문에

읽을 것이 없어서입니다.

 

지워주어야겠죠?~

 

 

 

 

다시 실행시켜보니 다음과 같이 출력이 잘 되고 있습니다!!

 

 

이렇게 가져오면 우리가 원하는 데이터를 가져오기에

식별부분에서 더 쉽기 때문에

작업이 더 용이하겠죠.

 

 


 

 

soup명령어들을 알아볼게요!!

soup.find_all(TAG_NAME) ==> 특정 태그(TAG_NAME)로 둘러싸인 요소를 찾아서 리스트로 반환

 

soup.find_all("head") ==> head로 둘러쌓인 내용 조회

soup.find_all("link") ==> link로 둘러쌓인 내용 조회

 

그리고 len을 주시면 몇개인지도 출력됩니다

 

# soup.find_all(TAG_NAME) ==> 특정 태그(TAG_NAME)로 둘러쌓인 요소를 찾아서 리스트로 변환
head = soup.find_all("head")
# print(head, len(head))

links = soup.find_all("link")
# print(links, len(links))

spans = soup.find_all("span", {"itemprop": "text"})
# print(spans, len(spans))

 

 

 

 

 

 

이제 우리가 가져오고 싶은 것들 가져와볼게요:)

딱!!! 명언 부분만!!!  가져오고싶습니다.

 

 

 

관리자 화면에서 분석해볼게요

다음 보니까 <span></span>으로 둘러싸여있네요

 

 

 

그래서 다음 코드를 넣어서 실행시켜봤습니다

그냥 "span"만 넣어서 찾으면 다음과 같이 필요없는 것들도 출력이 됩니다

 

 

 

그래서 다음과 같이 해준거에요:)

soup.find_all("span", {"itemprop""text"}) ==> span태그로 된 것 중에서 itemprop 속성인 값이 text인 것 찾기

spans = soup.find_all("span", {"itemprop": "text"})
print(spans, len(spans))

for s in spans:
    print(s.text)

 

 

10개가 있군요!!

 

 

 

이제 다음 코드 넣어서 명언만 출력해내기

 

from bs4 import BeautifulSoup as bs
import urllib.request as req

# 웹 페이지(문서)를 가져와서 가공

url = 'https://quotes.toscrape.com/'
html = req.urlopen(url)
# print(html.read())

# print("*" * 100)
# 뷰티풀소프를 이용해서 피싱하기 좋은 상태로 변환
soup = bs(html.read(), 'html.parser')

# soup.find_all(TAG_NAME) ==> 특정 태그(TAG_NAME)로 둘러쌓인 요소를 찾아서 리스트로 변환
head = soup.find_all("head")
# print(head, len(head))

links = soup.find_all("link")
# print(links, len(links))

#itemprop 속성 값으로 text를 가지는 span 태그를 모두 검색해서 리스트로 반환
spans = soup.find_all("span", {"itemprop": "text"})
# print(spans, len(spans))

for s in spans:
    print(s.text)

 

 

짜잔!

 

 

 

 

 

 

728x90
반응형