HTML, XPath, 정규식
BeautifulSoup4 : 네이버 웹툰, 가우스 전자, 쿠팡, 다음
CSV : 네이버 금융
Selenium 네이버 로그인, 네이버 항공권, 구글무비
Headless 크롬, Wrap Up
웹사이트 접속 후, 전체 text 읽어오기
import requests
res = requests.get("http://google.com")
res.raise_for_status()
print("응답코드 :", res.status_code) #200이면 정상
# print(len(res.text))
# print(res.text)
with open("mygoogle.html", "w", encoding="utf8") as f:
f.write(res.text)
# if res.status_code == requests.codes.ok:
# print("정상")
# else:
# print("에러")
정규표현식 re
import re
# abcd, book, desk
# ca?e
# care, cafe, case, cave
# caae, cabe, cace, cade, ...
p = re.compile("ca.e")
# . (ca.e) : 하나의 문자를 의미 > care, cafe, case (O) | caffe (X)
# ^ (^de) : 문자열의 시작 > desk, destination (O) | fade (X)
# $ (se$) : 문자열의 끝 > case, base (O) | face (X)
def print_match(m):
if m:
print("m.group():", m.group()) # 일치하는 문자열 반환
print("m.string:", m.string) # 입력받은 문자열
print("m.start():", m.start()) # 일치하는 문자열의 시작 index
print("m.end():", m.end()) # 일치하는 문자열의 끝 index
print("m.span():", m.span()) # 일치하는 문자열의 시작 / 끝 index
else:
print("매칭되지 않음")
# m = p.match("careless") # match : 주어진 문자열의 처음부터 일치하는지 확인
# print_match(m)
# m = p.search("good care") # search : 주어진 문자열 중에 일치하는게 있는지 확인
# print_match(m)
# lst = p.findall("good care cafe") # findall : 일치하는 모든 것을 리스트 형태로 반환
# print(lst)
# 1. p = re.compile("원하는 형태")
# 2. m = p.match("비교할 문자열") : 주어진 문자열의 처음부터 일치하는지 확인
# 3. m = p.search("비교할 문자열") : 주어진 문자열 중에 일치하는게 있는지 확인
# 4. lst = p.findall("비교할 문자열") : 일치하는 모든 것을 "리스트" 형태로 반환
# 원하는 형태 : 정규식
# . (ca.e) : 하나의 문자를 의미 > care, cafe, case (O) | caffe (X)
# ^ (^de) : 문자열의 시작 > desk, destination (O) | fade (X)
# $ (se$) : 문자열의 끝 > case, base (O) | face (X)
headers 와 User-Agent
import requests
url = "http://nadocoding.tistory.com"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}
res = requests.get(url, headers=headers)
res.raise_for_status()
with open("nadocoding.html", "w", encoding="utf8") as f:
f.write(res.text)
bs4 BeautifulSoup
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")
# print(soup.title)
# print(soup.title.get_text())
# print(soup.a) # soup 객체에서 처음 발견되는 a element 출력
# print(soup.a.attrs) # a element 의 속성 정보를 출력
# print(soup.a["href"]) # a element 의 href 속성 '값' 정보를 출력
# print(soup.find("a", attrs={"class":"Nbtn_upload"})) # class="Nbtn_upload" 인 a element 를 찾아줘
# print(soup.find(attrs={"class":"Nbtn_upload"})) # class="Nbtn_upload" 인 어떤 element 를 찾아줘
# print(soup.find("li", attrs={"class":"rank01"}))
#rank1 = soup.find("li", attrs={"class":"rank01"})
#print(rank1.a.get_text())
#print(rank1.next_sibling)
# rank2 = rank1.next_sibling.next_sibling
# rank3 = rank2.next_sibling.next_sibling
# 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"))
webtoon = soup.find("a", text="독립일기-11화 밥공기 딜레마")
print(webtoon)
'활용3. 웹스크래핑(0825-0829) > requests' 카테고리의 다른 글
스크래핑 2-3 네이버 주식 (csv 모듈 ) (0) | 2022.08.28 |
---|---|
스크래핑 2-2 다음 영화 이미지 저장( requests ) (0) | 2022.08.28 |
스크래핑 2-1 쿠팡 (User-Agent 헤더) (0) | 2022.08.28 |
스크래핑 1 : 웹툰 가우스 전자 평균 (0) | 2022.08.27 |
댓글