인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

prayerwung님의 프로필 이미지

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

SSLError 해결하는 방법

크롤링 결과 값이 달라요

작성

·

51

0

  • 제가 RISS 크롤링 강의를 듣는데 저는 강사님과 다르게 결과물이 하나밖에 안 뜨는데 왜 그런지 잘 모르겠습니다.

    1.png.webp

    이런식으로 한개 밖에 안 뜨네요.

파이썬에

import requests

from bs4 import BeautifulSoup

param = {

'isDetailSearch': 'N',

'searchGubun': 'true',

'viewYn': 'OP',

'strQuery': '패션 인공지능',

'order': '/DESC',

'onHanja': 'false',

'strSort': 'RANK',

'iStartCount': 0,

'sflag': 1,

'isFDetailSearch': 'N',

'pageNumber': 1,

'resultKeyword': '패션 인공지능',

'icate': 're_a_kor',

'colName': 're_a_kor',

'pageScale': 10,

'isTab': 'Y',

'query': '패션 인공지능',

}

response = requests.get("https://www.riss.kr/search/Search.do?", params=param)

html = response.text

soup = BeautifulSoup(html, 'html.parser')

articles = soup.select(".srchResultListW > ul > li")

# 헤더가 필요한 경우

header = {

'User-Agent' : 'Mozilla/5.0',

'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y&regnm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5'

}

for article in articles:

title = article.select_one(".title > a").text

link = 'https://www.riss.kr/' + article.select_one(".title > a").attrs['href']

# 상세 페이지 요청

response = requests.get(link, headers=header, verify=False)

html = response.text

soup = BeautifulSoup(html, 'html.parser')

press = soup.select_one(".infoDetailL > ul > li:nth-of-type(2) > div").text

year = soup.select_one(".infoDetailL > ul > li:nth-of-type(5) > div").text

print(title, link, press, year)

이렇게 했는데 왜 저는 결과물이 하나밖에 안나오는지 못찾겠어요..!

답변 2

1

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

안녕하세요 스타트코딩입니다.

음 저는 똑같은 코드로 테스트 해봤는데 10개가 잘 나오고 있거든요?

 

image.png

다시 한번 테스트 해보시겠어요?

import requests

from bs4 import BeautifulSoup

param = {

'isDetailSearch': 'N',

'searchGubun': 'true',

'viewYn': 'OP',

'strQuery': '패션 인공지능',

'order': '/DESC',

'onHanja': 'false',

'strSort': 'RANK',

'iStartCount': 0,

'sflag': 1,

'isFDetailSearch': 'N',

'pageNumber': 1,

'resultKeyword': '패션 인공지능',

'icate': 're_a_kor',

'colName': 're_a_kor',

'pageScale': 10,

'isTab': 'Y',

'query': '패션 인공지능',

}

response = requests.get("https://www.riss.kr/search/Search.do?", params=param)

html = response.text

soup = BeautifulSoup(html, 'html.parser')

articles = soup.select(".srchResultListW > ul > li")

# 헤더가 필요한 경우

header = {

'User-Agent' : 'Mozilla/5.0',

'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y&regnm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5'

}

for article in articles:

    title = article.select_one(".title > a").text

    link = 'https://www.riss.kr/' + article.select_one(".title > a").attrs['href']

    # 상세 페이지 요청

    response = requests.get(link, headers=header, verify=False)

    html = response.text

    soup = BeautifulSoup(html, 'html.parser')

    press = soup.select_one(".infoDetailL > ul > li:nth-of-type(2) > div").text

    year = soup.select_one(".infoDetailL > ul > li:nth-of-type(5) > div").text

    print(title, link, press, year)

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. prayerwung님.

크롤링 결과 값이 하나밖에 나오지 않는 부분에 대해 해결 방법을 찾아보겠습니다. 주어진 코드의 문제는 여러 이유가 있을 수 있는데, 보통은 HTML 구조의 변화, 잘못된 CSS 선택자 사용, 혹은 웹사이트의 속도 제한 때문일 수 있습니다.

코드 문제 및 해결 방법

  1. HTML 구조 확인: 웹사이트의 HTML 구조가 변경되었거나, 가져오는 데이터가 여러 페이지에 걸쳐 나눠져 있을 수 있습니다. soup.select(".srchResultListW > ul > li") 이 부분에 문제가 있는지 확인해보세요. 웹사이트의 현재 HTML을 확인해서 선택자가 맞는지 검토하세요.

  2. CSS 선택자 문제: 선택자가 전체 항목이 아닌 특정 항목만 가져오도록 설정되어 있을 수 있습니다. 선택자가 정확히 맞는지 확인하고, 모든 리스트 항목을 선택할 수 있도록 수정해 보세요.

  3. 페이지 네비게이션: RISS의 경우 검색 결과가 페이지 별로 나눠져 있을 수 있으며, 현재 페이지 번호나 시작 인덱스를 변경하며 다른 결과를 가져와야 할 수도 있습니다.

  4. User-Agent 헤더: 사이트가 클라이언트를 차단하지 않도록 User-Agent를 추가하세요.

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
  1. 사이트의 속도 제한: 요청 간 간격이 너무 짧으면 사이트에서 차단할 수 있습니다. time.sleep() 함수를 사용해 요청 간 딜레이를 추가하세요.

참고할 유사한 질문과 답변

이 코드 업데이트를 통해 문제를 해결할 수 있길 바랍니다. 지속적으로 문제가 발생한다면 사이트의 HTML 구조를 다시 한 번 확인하시고, 각 HTML 요소가 정확히 선택되었는지 체크하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.