수정 및 추가, 삭제할 내용입니다. (책 발간 후 시간이 흐름에 따라 해당 사이트에 변화가 발생하고 있습니다)
--- 2024년 8월 기준 ---
p104 페이지 맨 아래 수정 : 알고리즘 관련 사이트 -> https://runestone.academy/ns/books/published/pythonds/index.html
p247 내용 일부 수정
내용 일부 삭제 : 중간 지점의
"드라이버 파일을 설치할 때 알아 두기" 부터 현재 페이지 끝까지 제거 합니다.
(이 내용은 3.9 버전까지만 지원. 3.9 상위 버전을 지원하지 않으므로 책의 내용에서 빼도록 하겠습니다.)
p288 내용 일부 수정 :
ex_09_02.py 소스 중에서
print('id={} --> {}'.format(self.getName( ), i))을
print('id={} --> {}'.format(threading.current_thread().name, i)) <= 로 변경 (이유 : 버전업됨)
p322 내용 일부 수정 : 맨 위 실습 코드에서
print(soup.select_one('div#kakaoIndex > a').string)
datas = soup.select('div#kakaoIndex > a')
를 아래 처럼 변경
print(soup.select_one('div.direct-link > a').string)
datas = soup.select('div.direct-link > a')
p324 ~ p325 내용 일부 수정 (이유:홈 페이지 구조가 변경된 것 같네요):
# 대신증권 추천 코드의 4번째 행을 변경합니다.
price = bsObj.select_one("div.todayBox > div > dl > dd:nth-child(2) > div.numArea.down > strong").string
를 아래 처럼 변경하세요
price = bsObj.select_one("div.numArea.up > strong").string
페이지 맨 아랫 부분
활용 예제 4 영화 랭킹 정보 스크래핑을 아래와 같이 대체합니다. (이유:사이트 서비스가 종료되었습니다.)
활용 예제 4 쇼핑인사이트 랭킹 정보 스크래핑
네이버가 제공하는 쇼핑인사이트 랭킹 정보 페이지의 데이터를 스크래핑해 보자.
브라우저에서 https://datalab.naver.com 를 요청하면 쇼핑인사이트 랭킹 정보가 보인다. 여기서 분야별 인기 검색어를 선택할 수 있다.
예를 들어 '패션의류'를 선택했다고 하면 바로 아래에서 최근 날짜에 해당하는 인기순위가 보일 것이다.
[F12] 기능키를 눌러 개발자 도구 화면이 나타나면 오른쪽 Elements 탭에서 <span class="title">원피스</span>"를 선택할 수 있다.
ex_10_09.py -------------------------------------------
from bs4 import BeautifulSoup
import urllib.request
url = "https://datalab.naver.com/"
datas = urllib.request.urlopen(url)
soup = BeautifulSoup(datas, 'html.parser')
m_list = soup.select('div.rank_scroll > ul.rank_list > li.list')
# print(m_list)
title_list = soup.select('a.list_area > span.title')
for index, title_element in enumerate(title_list, start=1):
title = title_element.string
print(str(index) + "위: " + title)
-----------------------------------------------------------
select('div.rank_scroll > ul.rank_list > li.list') 으로 조건에 맞는 모든 a 태그의 하위 요소 중 클래스가 title인 span 태그를 읽어 리스트 타입으로 반환된 값을 변수에 저장한다.
그리고 enumerate를 이용한 반복문을 사용한다. 반복문에 의해 title_list 변수에 저장된 span 태그의 string 값을 하나씩 꺼내 인덱스와 함께 상품명을 출력한다.
다음은 네이버가 제공하는 쇼핑인사이트 랭킹 데이터를 스크래핑 처리한 결과 중 일부이다.
실행 결과
1위: 원피스
2위: 스투시반팔
3위: 써스데이아일랜드원피스
...
p326 윗부분 수정 세번째 행 : (이유:사이트 서비스가 종료되었습니다.)
서비스 주소는 http://openapi.seoul.go.kr:8088/sample/xml/SeoulLibraryTime/1/5이다. 를
서비스 주소는 https://raw.githubusercontent.com/pykwon/python/master/seoullibtime5.xml이다. <= 로 변경
ex_10_10.py 소스의 일부 수정
url = "http://openapi.seoul.go.kr:8088/sample/xml/SeoulLibraryTime/1/5"
plainText = urllib.request.urlopen(url).read().decode()
xmlObj = BeautifulSoup(plainText, 'html.parser')
를 아래의 내용으로 변경합니다.
url = "https://raw.githubusercontent.com/pykwon/python/master/seoullibtime5.xml"
plainText = urllib.request.urlopen(url).read().decode()
xmlObj = BeautifulSoup(plainText, features='html.parser')
p331 맨 아래
서비스 주소는 http://openapi.seoul.go.kr:8088/sample/json/SeoulLibraryTime/1/5이다.
를
서비스 주소는 https://raw.githubusercontent.com/pykwon/python/master/seoullibtime5.json이다. <= 변경
ex_10_13.py 소스 일부 수정
url = "http://openapi.seoul.go.kr:8088/sample/json/SeoulLibraryTime/1/5"
를 아래의 내용으로 변경합니다.
url = "https://raw.githubusercontent.com/pykwon/python/master/seoullibtime5.json"
여기까지 입니다.