네이버 홈페이지에서 검색어를 입력한 뒤, '뉴스' 탭에서 뉴스 기사 제목들을 크롤링할 때 한 페이지 당 10개의 기사가 나오는데요, 페이지를 넘기지 않는다면 10개까지밖에 크롤링이 되지 않습니다.
따라서 자동으로 페이지를 넘기고, 다시 기사 제목을 크롤링해야 하는데요, 코드를 어떻게 입력해야 페이지를 자동으로 넘길 수 있을까요?
해답은 바로, url 주소에 있는데요,
예를 들어, 네이버 검색창에 '여행'이라고 검색한 다음 뉴스 탭을 누르면 나오는 첫 페이지의 주소가 다음과 같습니다.
https://search.naver.com/search.naver?where=news&sm=tab_jum&query=여행
한편, 두 번째 페이지와 세 번째 페이지를 각각 누른 뒤에 주소는 아래와 같이 나오게 됩니다.
https://search.naver.com/search.naver?&where=news&query=여행&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=23&start=11&refresh_start=0
https://search.naver.com/search.naver?&where=news&query=여행&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=48&start=21&refresh_start=0
이 두 url 차이는 바로 뒷 부분인 'start=' 에서 다른데요, 두번째 페이지에서는 start=11, 세번째 페이지에서는 start=21 이라고 주소가 설정되어 있습니다. 이는 한 페이지당 뉴스 기사가 10개 이므로 두 번째 페이지에서는 11번째 기사부터 시작하고, 세 번째 페이지에서는 21번째 기사부터 시작하니 해당 주소정보가 그렇게 나와있는 것입니다.
다시 돌아가서, 첫 페이지의 주소가 간결한데요, 두 번째 페이지의 url 에서 start=1 로 바꾸면 동일하게 첫 페이지로 나온답니다. 따라서 이러한 url의 형태를 이용하여 주소를 설정해주면 다음 페이지로 넘어가는 기능과 같아집니다.
그렇다면, 만약 '여행'을 키워드로 10페이지까지 뉴스기사를 크롤링하고 싶다면 아래와 같이 코드를 작성하시면 됩니다.
url = "https://search.naver.com/search.naver?"
pages = ['1','11','21','31','41','51','61','71','81','91'] #start = 에 들어가는 부분
query_txt = "여행"
for page in pages :
params = {
'where' : 'news', #뉴스 탭
'query' : query_txt,
'sm' : 'tab_jum',
'start' : page #여기서 페이지를 지정해줍니다.
}
resp = requests.get(url,params)
soup = BeautifulSoup(resp.content, 'lxml') #본문 html 가져오기
# 수행할 명령어 -
앞에 pages = ['1','11','21','31','41','51','61','71','81','91'] 라는 리스트를 만들어주고, url의 start= 부분에 해당 데이터가 하나씩 들어가도록 해줍니다.(딕셔너리 형태의 params 변수에 저장)
그리고 for문 맨 마지막에 기사 제목을 크롤링하는 코드를 입력하고 실행하면, 10페이지에 해당하는 뉴스기사가 모두 크롤링된 것을 확인할 수 있습니다.
'BLOG > 웹크롤링' 카테고리의 다른 글
[웹크롤링] 'title', 'src', 'href' 속성에 있는 텍스트 크롤링하기 (0) | 2021.03.19 |
---|---|
[웹크롤링] 동일한 이름의 여러 태그 중 두 번째 태그 찾는 방법 (0) | 2021.03.19 |
[웹크롤링] 쿠팡 사이트 크롤링 - 오류 없이 접속하는 방법 (requests 사용) (0) | 2021.03.19 |
[웹크롤링] Response [406] : 에러 발생 이유 & 해결 방법 - 헤더값 설정 (1) | 2021.03.19 |
[웹크롤링] 해당 페이지 캡처(screen shot)하기 - pyautogui (0) | 2021.03.19 |