크롤링이란 원하는 페이지의 정보를 긁어오는 것이고, 스크래핑은 그 긁어온 정보에서 필요한 데이터를 뽑아내는 것을 말합니다.
ex) 영화 사이트를 크롤링하여 그중 평점 데이터를 스크래핑 해와!
이번 게시글에선 파이썬의 requests 라이브러리를 사용해서 웹페이지의 html 코드를 가져오는 것 (크롤링)을 해보겠습니다.
import requests
response = requests.get('https://www.naver.com/')
search_page = response.text
print(search_page)
위 코드는 현재 입력한 url의 html 코드를 긁어오는 코드입니다.
하나하나 알아보겠습니다.
import requests 는 requests 라이브러리를 사용하기 위해 import 해준 것입니다.
requests.get(url)은 정보를 긁어올 페이지의 url을 해당 파라미터로 넣어주면 그 해당 url의 정보를 가져옵니다.
response.text 는 가져온 정보 ( html code)를 text 형태로 바꿔줍니다.
위처럼 작성하고 print를 해주면 해당 페이지의 html이 터미널에 나오는 것을 확인할 수 있습니다.
이런 requests 나 bs4를 사용해서 원하는 정보를 크롤링하고 거기서 원하는 데이터를 스크래핑하기 위해서는 웹사이트 주소에 대해 이해해야 사용하기 쉽습니다.
웹 사이트의 주소
이번에는 웹페이지의 주소가 무엇을 의미하는지에 대해 알아보겠습니다.
위 이미지는 네이버의 메인 페이지에 접속했을 때의 url입니다.
이를 해석하면 https:// 부분은 소통방식, www.naver.com 은 도메인 이름입니다.
그 후 검색 창에 파이썬을 검색한 다음 url의 변화를 살펴보겠습니다.
위 사진은 검색창에 tv를 검색한 후의 url입니다.
간단히 살펴보면 아까 메인 페이지에서 search.naver와? query=파이썬 이 생긴 것을 볼 수 있습니다.
각각 search.naver는 페이지 경로,? 는 쿼리 스트링이라고 부릅니다.
쿼리 스트링은 위처럼 ? 뒤에 나오는 것을 함수의 파라미터처럼 해당 페이지에 옵션을 넘겨주는 역할을 하는데요.
즉 이 페이지에서는 search 페이지에 쿼리 스트링을 통해 파이썬이라는 값을 넣어주고 있는 것입니다.
그럼 이번엔 네이버의 검색창이 아닌 url에 직접 검색어를 입력해보겠습니다.
아까와 다르게 네이버의 검색창을 이용하지 않고 직접 url의 쿼리 스트링 뒤에 '장고'라는 부분을 추가해주어 보았는데요.
위처럼 검색창에 제가 url에 입력한 검색어가 자동으로 입력되어 있는 것과 검색도 제대로 이루어져 있는 것을 볼 수 있습니다.
여러 웹 페이지를 한 번에 가져오기
네이버에서 원하는 검색어들을 리스트로 묶어서 반복문을 통해 편하게 페이지를 가져오게 만들어 보겠습니다.
base : https://www.naver.com/
검색 시 : https://search.naver.com/search.naver?query=검색어
네이버에서 검색을 하게 되면 위처럼 url이 변한 것을 확인할 수 있는데요.
방금 위에서 배웠듯이 잘 보면 '?' 즉 쿼리 스트링이 있습니다.
즉? q= 뒤에 원하는 검색어를 입력하면 그게 검색한 페이지가 된다는 소리입니다.
import requests
search_keyword = ['소신', 'sosin', 'programmer', '파이썬', '크롤링']
search_page = []
for search in search_keyword:
response = requests.get(f'https://search.naver.com/search.naver?query={search}')
search_page.append(response.text)
print(search_page[0])
print(len(search_page))
즉 위처럼 원하는 검색어를 list에 적어놓고 url에 반복문을 통해 해당 검색어들을 입력하고 print로 출력을 할시 여러 페이지를 편하게 크롤링할 수 있게 됩니다.
다음 게시글에서는 이번에 배운 request와 butifulsoup을 통해 원하는 데이터를 가져오는 스크래핑을 구현해보겠습니다.
'Study > Python' 카테고리의 다른 글
[Python] Kakao API를 이용하여 주소를 이용해 위도, 경도 알아내기 (0) | 2021.12.30 |
---|---|
[Python] Kakao API를 이용하여 주소를 이용해 위도, 경도 알아내기 (0) | 2021.12.30 |
[ Python ] pymongo에서 문자열 포함 여부를 확인하는 방법 (0) | 2021.12.27 |
[Python] 크롤링과 스크래핑 ( crawling, scraping ) #2 [ BeutifulSoup : bs4 ] (0) | 2021.12.20 |
[Python] Openpyxl과 네이버 Geocoding을 이용한 위도경도 변환하기 (0) | 2021.12.16 |