반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터분석
- 소프트웨어
- 자바스크립트
- 네트워크보안
- 네트워크
- 웹개발
- 사이버보안
- 보안
- 데이터과학
- 클라우드컴퓨팅
- 컴퓨터공학
- 코딩
- 프로그래밍
- 인공지능
- 알고리즘
- 빅데이터
- 2
- I'm Sorry
- 파이썬
- 데이터베이스
- 머신러닝
- 데이터구조
- 버전관리
- 컴퓨터비전
- 딥러닝
- 프로그래밍언어
- 소프트웨어공학
- Yes
- 자료구조
- 컴퓨터과학
Archives
- Today
- Total
스택큐힙리스트
b><p>Webscraping using BeautifulSoup Index Error</p></b>아름답게 이쁘게 인덱스 오류를 사용하여 웹 스크래핑하기 본문
카테고리 없음
b><p>Webscraping using BeautifulSoup Index Error</p></b>아름답게 이쁘게 인덱스 오류를 사용하여 웹 스크래핑하기
스택큐힙리스트 2024. 1. 15. 14:37반응형
BeautifulSoup을 사용하여 데이터를 가져올 때 인덱스 오류가 발생하는 곳이 있습니다. 많은 데이터를 가져올 수 있지만 어딘가에서 잘못되었습니다. 이를 어떻게 해결할 수 있을까요?
import requests
from bs4 import BeautifulSoup
totalCar = 0
for pageNumber in range(3, 7):
r = requests.get(https://www.autoscout24.com/lst/bmw?sort=standard&desc=0&offer=U&ustate=N%2CU&size=20&page=+
str(pageNumber)+&cy=D&mmm=47%7C%7C&mmm=9%7C%7C&atype=C&)
r.status_code
r.content
soup = BeautifulSoup(r.content,lxml)
#soup.prettify
car_details = soup.find_all(div,attrs={class:cl-list-element cl-list-element-gap})
for detail in car_details:
car_link = https://www.autoscout24.com+detail.a.get(href)
#print(car_link)
car_r = requests.get(car_link)
car_soup = BeautifulSoup(car_r.content,lxml)
car_make = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd:nth-of-type(1))[0].text
#car_model = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd:nth-of-type(2))[0].text
car_model = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)[0].text
car_year = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)[1].text
car_color = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)[2].text
car_body = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)[3].text
print(제조사:{} 모델:{} 연도:{} 색상:{} 바디:{}.format(car_make,car_model,car_year,car_color,car_body))
print(-*20)
totalCar+=1
print(totalCar)
답변 1
import requests
from bs4 import BeautifulSoup
totalCar = 0
for pageNumber in range(3, 7):
r = requests.get(https://www.autoscout24.com/lst/bmw?sort=standard&desc=0&offer=U&ustate=N%2CU&size=20&page=+
str(pageNumber)+&cy=D&mmm=47%7C%7C&mmm=9%7C%7C&atype=C&)
r.status_code
r.content
soup = BeautifulSoup(r.content,lxml)
#soup.prettify
car_details = soup.find_all(div,attrs={class:cl-list-element cl-list-element-gap})
for detail in car_details:
car_link = https://www.autoscout24.com+detail.a.get(href)
#print(car_link)
car_r = requests.get(car_link)
print(car_link)
car_soup = BeautifulSoup(car_r.content,lxml)
car_make = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd:nth-of-type(1))[0].text
a = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)
car_model = a[0].text
car_year = a[1].text
car_color = a[2].text
car_body = car_body = a[3].text if len(a) > 3 else '-' # <-- check, if car body information is present
print(Make:{} Model:{} Year:{} Color:{} Body:{}.format(car_make,car_model,car_year,car_color,car_body))
print(-*20)
totalCar+=1
print(totalCar)
import requests
from bs4 import BeautifulSoup
totalCar = 0
for pageNumber in range(3, 7):
r = requests.get(https://www.autoscout24.com/lst/bmw?sort=standard&desc=0&offer=U&ustate=N%2CU&size=20&page=+
str(pageNumber)+&cy=D&mmm=47%7C%7C&mmm=9%7C%7C&atype=C&)
r.status_code
r.content
soup = BeautifulSoup(r.content,lxml)
#soup.prettify
car_details = soup.find_all(div,attrs={class:cl-list-element cl-list-element-gap})
for detail in car_details:
car_link = https://www.autoscout24.com+detail.a.get(href)
#print(car_link)
car_r = requests.get(car_link)
print(car_link)
car_soup = BeautifulSoup(car_r.content,lxml)
car_make = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd:nth-of-type(1))[0].text
a = car_soup.find(div,attrs={class:cldt-categorized-data cldt-data-section sc-pull-right}).select(dl > dd > a)
car_model = a[0].text
car_year = a[1].text
car_color = a[2].text
car_body = car_body = a[3].text if len(a) > 3 else '-' # <-- check, if car body information is present
print(제조사:{} 모델:{} 연도:{} 색상:{} 바디:{}.format(car_make,car_model,car_year,car_color,car_body))
print(-*20)
totalCar+=1
print(totalCar)
인쇄:
...
--------------------
링크
메이크:
메르세데스-벤츠
모델:A 180 년도:2009 색상:회색 바디:세단
--------------------
링크
메이크:
아우디
모델:A4 년도:2008 색상:검정 바디:세단
--------------------
80
답변 2
웹 스크래핑은 BeautifulSoup을 사용하여 Index 오류가 발생할 수 있습니다.웹 스크래핑은 인터넷 상의 정보를 추출하고 분석하는 프로세스입니다. BeautifulSoup은 웹 스크래핑을 용이하게 도와주는 파이썬 라이브러리로, HTML 및 XML 문서를 파싱하고 데이터를 추출할 수 있습니다. 하지만 이러한 작업 중에 Index 오류가 발생할 수 있습니다.
Index 오류는 일반적으로 데이터 추출 작업을 수행할 때 발생하는 문제입니다. BeautifulSoup은 웹 페이지의 HTML 구조를 탐색하여 특정 요소를 선택하는 기능을 제공합니다. 그러나 HTML 문서가 올바르게 구성되어 있지 않거나 개발자의 예상과 다른 경우, BeautifulSoup은 예기치 않은 결과를 반환하거나 Index 오류를 발생시킬 수 있습니다.
Index 오류가 발생하는 주요 이유 중 하나는 HTML 구조의 변경입니다. 웹 페이지는 주기적으로 업데이트되기 때문에 HTML 요소의 위치, 클래스명 또는 태그가 변경될 수 있습니다. 만약 웹 스크래핑 코드가 변경된 HTML 구조를 감지하지 못하면 Index 오류가 발생할 수 있습니다.
또 다른 이유는 데이터가 예상과 다른 형식으로 표시되는 경우입니다. 예를 들어, 데이터의 값을 가져올 때 특정 인덱스를 참조하지만 해당 인덱스가 비어 있거나 존재하지 않을 수 있습니다. 이 경우에도 Index 오류가 발생할 수 있습니다.
Index 오류를 방지하기 위해 다음과 같은 SEO-conscious한 접근 방식을 취할 수 있습니다.
1. 적절한 예외 처리: BeautifulSoup 작업 중에 Index 오류가 발생할 수 있다고 가정하여 적절한 예외 처리 코드를 작성해야 합니다. 예외 처리를 통해 오류가 발생한 경우 코드가 중단되지 않게 하고, 대체 데이터 처리나 오류 로깅 등의 조치를 취할 수 있습니다.
2. HTML 구조 모니터링: 웹 페이지의 HTML 구조는 때때로 변경될 수 있습니다. 따라서 스크래핑 코드를 작성한 이후에도 주기적으로 HTML 구조를 모니터링하고 검토해야 합니다. 변경 사항을 감지하고 코드를 수정하여 적합하게 대응할 수 있도록 해야 합니다.
3. 데이터 유효성 확인: 데이터 스크래핑 작업 수행 전에 가져올 데이터의 유효성을 확인하는 것이 중요합니다. 데이터가 예상과 일치하는지, 비어 있는지, 형식 등의 유효성을 검사하여 Index 오류를 방지할 수 있습니다.
4. 유연한 선택 기준: 스크래핑할 때 특정 인덱스에 의존하지 않고 유연한 선택 기준을 사용하는 것도 도움이 될 수 있습니다. HTML 요소를 선택하는 데 클래스명, 태그 유형, 속성 등 다양한 방법을 사용하여 보다 견고한 스크래핑 코드를 작성할 수 있습니다.
웹 스크래핑은 SEO-conscious한 작업이 필요한 분야입니다. 웹 페이지의 구조와 데이터 표현에 대한 변동성을 고려하고 예외 처리와 데이터 유효성 확인 등의 작업을 통해 Index 오류를 최소화해야만 정확하고 신뢰성 있는 데이터를 스크래핑할 수 있습니다. 이를 통해 SEO에 민감한 웹 사이트의 검색 엔진 최적화 작업을 지원할 수 있습니다.
반응형
Comments