프로덕트 스페이스
    • 분류 전체보기
      • WEB
      • SQL
      • 짧데이터
      • 참고자료
    공지사항
    방명록
    파이썬 Pyautogui 검색결과 전체 웹 스크래핑참고자료 / 2022. 6. 5. 15:17

     

     

    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
    COMMENT

TOP

티스토리툴바