BeuatifulSoup으로 1분만에 웹 스크래핑
검색결과 스크래핑부터 진행이 어려운 경우, 아래의 글을 먼저 읽고 와 주세요.
파이썬 BeautifulSoup으로 1분만에 웹 스크래핑
브라우저 스크래핑을 진행할 때는 크롬 브라우저를 권장합니다. 아래의 공식 홈페이지에서 다운로드할 수 있습니다. 크롬 브라우저 다운로드 바로가기 태그 구성 HTML 태그에는 속성명 과
prd-space.tistory.com
검색결과 스크래핑
특정 요소 스크래핑까지 완료되었다면, 다음과 같이 검색결과 스크래핑을 진행할 수 있습니다.
soup.select_one() 을 soup.select() 로 변경하여, HTML 전체를 스크래핑 할 수 있습니다.
import requests
from bs4 import BeautifulSoup
res = requests.get("URL주소")
html = res.text
soup = BeautifulSoup(html,"html.parser")
word = soup.select("CSS 선택자")
print(word)
스크래핑된 항목의 수량을 확인하려면, print(word) 에 len 함수를 이용하여 print(len(word)) 로 실행하면 됩니다.
import requests
from bs4 import BeautifulSoup
res = requests.get("URL주소")
html = res.text
soup = BeautifulSoup(html,"html.parser")
word = soup.select("CSS 선택자")
print(len(word))
for 문을 이용하기 위해, for i in a 와 같이 변수 안에서 반복되는 코드를 작성합니다.
이후, 속성에 따라 i.text , i.attr["herf"] 와 같은 수집하고자 하는 항목을 title , url 변수에 저장합니다.
마지막으로 print(title,url) 을 반복문에 포함하여 리스트를 출력하게 합니다.
import requests
from bs4 import BeautifulSoup
res = requests.get("URL주소")
html = res.text
soup = BeautifulSoup(html,"html.parser")
a = soup.select("CSS선택자")
for i in a:
title = i.text
url = i.attrs['href']
print(title,url)
URL 구조
URL은 프로토콜 , 도메인 , 패스 , 파라미터 로 이루어져 있습니다.
이 중 파라미터 는 키 와 값 으로 이루어져 있습니다. 이것을 이용하여 검색어를 변경할 수 있습니다.
구분 | 프로토콜 | 도메인 | 패스 | 파라미터 |
예시 | https:// | google.co.kr/ | search? | id=1&query=슬아 |
네이버의 검색어 파라미터에서는 query 가 검색어의 키 입니다. 아래 이미지를 참고해주세요.
Pyautogui
터미널에 pip install pyautogui 를 실행하여 설치합니다.
import pyautogui 로 라이브러리를 가져온 뒤, 검색어에 해당하는 파라미터인 query 에 {keyword} 변수를 선언합니다.
변수가 선언된 코드 상단에 keyword = pyautogui.prompt(”프롬프트 내용") 을 입력하여 프롬프트를 우선 실행하게 합니다.
from cmd import PROMPT
import requests
from bs4 import BeautifulSoup
import pyautogui
keyword = pyautogui.prompt("프롬프트 내용")
res = requests.get("URL주소///?query={keyword}")
html = res.text
soup = BeautifulSoup(html,"html.parser")
a = soup.select(".news_tit")
for i in a:
title = i.text
url = i.attrs['href']
print(title,url)
여러 페이지 수집
수집할 페이지의 URL 파라미터 규칙을 확인하여 키값을 확인합니다.
예시로, 네이버 뉴스 검색결과의 파라미터를 확인하면 1페이지에서는 start = 1 , 2페이지에서는 start = 11 입니다.
게시글이 10개씩 있기 때문에 첫 번째 노출되는 게시글의 순번이 규칙인 것으로 예상됩니다.
이렇게 페이지의 파라미터 규칙을 찾아내고 나면,
변경대상이 되는 키 값은 {b} 변수로 작성하고, range 함수를 해당 변수에 저장합니다.
range 함수를 이용하여 for i range(시작,끝,단계) : 코드를 작성하고, for 문으로 반복합니다.
만약 제가 네이버 뉴스 검색 결과를 1페이지부터 100페이지까지 수집하고 싶다면, \for i range(1,100,10) 이라고 작성하면 됩니다.
이 때, 반복해야 할 대상은 for 문 하단 전체이므로, 모두 드래그 하여 tab 키로 들여쓰기 합니다.
from cmd import PROMPT #cmd에서 프롬프트를 호출합니다.
import requests #requests 라이브러리를 가져옵니다.
from bs4 import BeautifulSoup #bs4 라이브러리의 BeautifulSoup 모듈을 가져옵니다.
import pyautogui # pyautogui 라이브러리를 가져옵니다.
keyword = pyautogui.prompt("프롬프트 내용") #코드를 실행하면 내용을 입력받아 kyeword에 저장합니다.
for b in range(1,10,1): #b 변수에 1부터 10까지 1씩 더하여 반복 실행합니다.
res = requests.get("URL주소///?query={keyword}&page={b}")
#query가 keyword 변수이고, page가 b인 URL주소를 가져옵니다.
html = res.text #URL의 text를 모두 html 변수에 저장합니다.
soup = BeautifulSoup(html,"html.parser") #html 분석을 요청합니다.
a = soup.select("CSS 선택자") #요청될 html 분석 CSS 선택자를 입력합니다.
for i in a: #선택된 CSS 선택자를 i만큼 반복합니다. i는 array에 존재하는 요소 수량이 됩니다.
title = i.text #i의 text를 가져와 title에 저장합니다.
url = i.attrs['href'] #i의 href를 가져와 url에 저장합니다.
print(title,url) #title, url을 출력합니다.
계속 예시로 들었던, 네이버 뉴스 검색 결과의 경우 아래와 같이 작성할 수 있습니다.
import requests
from bs4 import BeautifulSoup
import pyautogui keyword = pyautogui.prompt("검색어를 입력하세요.")
for i in range(1, 30, 10):
res = requests.get("https://search.naver.com/search.naver?where=news&sm=tab_pge&query={keyword}&start={1}")
html = res.text
soup = BeautifulSoup(html,"html.parser")
a = soup.select(".news_tit")
for x in a: title = x.text
url = x.attrs['href']
print(title,url)
'참고자료' 카테고리의 다른 글
파이썬 BeautifulSoup으로 1분만에 웹 스크래핑 (0) | 2022.06.05 |
---|---|
파이썬 및 아나콘다 설치 및 설정 (0) | 2022.06.05 |
Visual Studio Code 설치 및 한국어 언어팩 확장 (0) | 2022.06.04 |