beautifulsoup4, lxml 설치
import requests
from bs4 import BeautifulSoup
url = "https://comic.naver.com/webtoon/weekday.nhn"
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(
res.text, "lxml"
) # 가져온 html문서를 lxml 파서를 통해 beautifulsoup 객체(html 정보 저장)로 만듬
print(soup.title)
print(soup.title.get_text()) #글자만 가져오기
print(soup.a) #soup 객체에서 처음 발견된 a엘리먼트 정보
print(soup.a.attrs) #a엘리먼트 속성 정보
print(soup.a["href"]) #a엘리먼트의 속성 정보 중 href속성 값 정보
위 방법은 특정 html 문서 구조에 대해 잘 알 때? 사용함
그렇지 않을 때는 주로 find함수 사용!!
#class="Nbtn_upload"인 a태그를 찾아줘
print(soup.find("a", attrs={"class": "Nbtn_upload"})) # (특정 태그 이름, 조건) 일치하는 첫번째 발견 찾아오기
#class="Nbtn_upload"인 어떤 엘리먼트를 찾아줘
print(soup.find(attrs={"class": "Nbtn_upload"})) #태그 정보 안 적어도 찾기 가능
print(soup.find("li", attrs={"class": "rank01"})) #인기급상승 1위 정보 다 가져오기
rank1 = soup.find("li", attrs={"class": "rank01"}) #인기급상승 1위 정보 rank1변수에 저장
print(rank1.a) #rank1변수에 저장된 정보들 중 a태그 엘리먼트만 출력
print(rank1.a.get_text()) #a태그 속 글자만 출력
print(rank1.next_sibling.next_sibling) #다음 엘리먼트 출력(next_sibling 2번 명심!)
rank2 = rank1.next_sibling.next_sibling #2위 정보
rank3 = rank2.next_sibling.next_sibling #3위 정보
print(rank3.a.get_text())
rank2 = rank3.previous_sibling.previous_sibling #이전 엘리먼트 저장
print(rank2.a.get_text())
print(rank1.parent) #부모 태그 전체 출력
rank2 = rank1.find_next_sibling("li") # (조건)에 해당하는 다음 항목 찾기
print(rank2.a.get_text())
rank3 = rank2.find_next_sibling("li")
print(rank3.a.get_text())
rank2 = rank3.find_previous_sibling("li")
print(rank2.a.get_text())
print(rank1.find_next_siblings("li")) # rank1을 기준으로 다음 형제들 모두 가져옴
webtoon = soup.find("a", text="전지적 독자 시점-056. Ep.12 1인칭 주인공 시점 (4)") #태그 속 text가 일치하는 a엘리먼트 저장
print(webtoon)
import requests
from bs4 import BeautifulSoup
url = "https://comic.naver.com/webtoon/weekday.nhn"
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
# 네이버 웹툰 전체 목록 가져오기
cartoons = soup.find_all("a", attrs={"class": "title"})
# class 속성이 title인 모든 a element 반환
for cartoon in cartoons:
print(cartoon.get_text())
import requests
from bs4 import BeautifulSoup
url = "https://comic.naver.com/webtoon/list.nhn?titleId=675554" #웹툰<가우스전자>
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
cartoons = soup.find_all("td", attrs={"class": "title"}) #회차 배열로 저장
title = cartoons[0].a.get_text() #[0]회차
link = cartoons[0].a["href"] #[0]회차 링크 정보
print(title)
print("https://comic.naver.com" + link)
#for문 이용해 해당 페이지의 전체 회차 정보 가져오기
for cartoon in cartoons:
title = cartoon.a.get_text()
link = "https://comic.naver.com" + cartoon.a["href"]
print(title, link)
# 10개의 만화의 평점 구하기
total_rates=0
cartoons = soup.find_all("div", attrs={"class": "rating_type"})
for cartoon in cartoons:
rate = cartoon.find("strong").get_text()
print(rate)
total_rates += float(rate)
print("전체 점수: ", total_rates)
print("평균 점수: ", total_rates / len(cartoons))
+인터프리터 방식으로도 가능
+https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 한국어 번역도 가능하니 참고하자!
'파이썬' 카테고리의 다른 글
웹 스크래핑6(Selenium기본) (0) | 2021.07.08 |
---|---|
웹 스크래핑5(CSV, 네이버 금융) (0) | 2021.07.07 |
웹 스크래핑4(다음 영화) (0) | 2021.07.06 |
웹 스크래핑3(쿠팡) (0) | 2021.07.02 |
웹 스크래핑1 (0) | 2021.06.23 |