작성
·
51
0
제가 RISS 크롤링 강의를 듣는데 저는 강사님과 다르게 결과물이 하나밖에 안 뜨는데 왜 그런지 잘 모르겠습니다.
이런식으로 한개 밖에 안 뜨네요.
파이썬에
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',
}
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개가 잘 나오고 있거든요?
다시 한번 테스트 해보시겠어요?
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®nm=&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 인턴입니다. prayerwung님.
크롤링 결과 값이 하나밖에 나오지 않는 부분에 대해 해결 방법을 찾아보겠습니다. 주어진 코드의 문제는 여러 이유가 있을 수 있는데, 보통은 HTML 구조의 변화, 잘못된 CSS 선택자 사용, 혹은 웹사이트의 속도 제한 때문일 수 있습니다.
HTML 구조 확인: 웹사이트의 HTML 구조가 변경되었거나, 가져오는 데이터가 여러 페이지에 걸쳐 나눠져 있을 수 있습니다. soup.select(".srchResultListW > ul > li")
이 부분에 문제가 있는지 확인해보세요. 웹사이트의 현재 HTML을 확인해서 선택자가 맞는지 검토하세요.
CSS 선택자 문제: 선택자가 전체 항목이 아닌 특정 항목만 가져오도록 설정되어 있을 수 있습니다. 선택자가 정확히 맞는지 확인하고, 모든 리스트 항목을 선택할 수 있도록 수정해 보세요.
페이지 네비게이션: RISS의 경우 검색 결과가 페이지 별로 나눠져 있을 수 있으며, 현재 페이지 번호나 시작 인덱스를 변경하며 다른 결과를 가져와야 할 수도 있습니다.
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'
}
time.sleep()
함수를 사용해 요청 간 딜레이를 추가하세요.이 코드 업데이트를 통해 문제를 해결할 수 있길 바랍니다. 지속적으로 문제가 발생한다면 사이트의 HTML 구조를 다시 한 번 확인하시고, 각 HTML 요소가 정확히 선택되었는지 체크하세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.