from Crawler import crawler from pandas import DataFrame total_url = 'http://books.toscrape.com/' categories = crawler.select( total_url, selector= '#default > div > div > div > aside > div.side_categories > ul > li > ul > li > a' ) categorie_list = [] for categorie in categories: categorie_list.append(categorie.text.strip().replace(' ', '-').lower()) # print('Total Categorie {}'.format(len(categorie_list))) # for categorie_print in categorie_list: # print('categorie : {}'.format(categorie_print)) n = 1 main_url_list = [] full_url_list = [] for url_catgorie in categorie_list: main_url = 'http://books.toscrape.com/catalogue/category/books/{}_{}'.format( url_catgorie, (n + 1)) full_url = main_url + '/index.html'
from Crawler import crawler from pandas import DataFrame url = 'http://books.toscrape.com/catalogue/category/books/mystery_3/index.html' page_list = [] page_n = crawler.select(url, selector='.pager > li.current') for h in page_n: page_list.append(h.text.strip().split()) # print(page_list) title_list = [] price_list = [] for n in range(int(page_list[0][1]), int(page_list[0][-1]) + 1): url_s = 'http://books.toscrape.com/catalogue/category/books/mystery_3/page-{}.html'.format( n) dom1 = crawler.select(url_s, selector='.product_pod > h3 > a') dom2 = crawler.select(url_s, selector='.product_price > p.price_color') for i in dom1: title_list.append(i.text) for j in dom2: price_list.append(j.text.lstrip('£')) # print(title_list)
#/section12/04-use_mod.py # 크롤러 모듈 사용하기 # Crawler.py에 있는 75행 crawler객체 from Crawler import crawler from sample import naver_news_url # 가져올 페이지의 URL과 추출할 영역의 CSS 셀렉터를 지정한다 html = crawler.select(naver_news_url, encoding="euc-kr", selector="#articleBodyContents") # 크롤링 결과의 원소 수 만큼 반복하면서 불필요한 태그를 제거한다. for item in html: crawler.remove(item, "script") crawler.remove(item, "a") crawler.remove(item, "br") crawler.remove(item, "span")\ # 크롤링 처리된 최종 결과 print(item.text.strip())
from Crawler import crawler from print_df import print_df from pandas import DataFrame """ 데이터 수집 - 네이버 메인에서 실시간 검색어 순위 가져오기 """ # 실시간 검색어 순위에 해당하는 CSS 셀렉터 설정 dom = crawler.select('https://www.naver.com', selector='.ah_roll_area > .ah_l > .ah_item > .ah_a > .ah_k') # 요소 확인(20개의 원소가 포함된 리스트가 반환) # print(dom) """ 데이터 전처리 - 수집 결과가 저장된 리스트의 원소에 대해 반복하면서 랭킹과 키워드를 분리하고 그 결과를 데이터 프레임으로 만들기 """ # 데이터프레임의 인덱스로 사dyd하기 위해 순위를 저장할 리스트 rank_list = [] # 검색어를 저장할 리스트 keyword_list = [] # 크롤링 결과수 만큼 반복하면서 순위와 검색어를 리스트에 분류 for i, item in enumerate(dom): rank_list.append('%02d위' % (i + 1)) keyword_list.append(item.text.strip()) # 데이터 프레임 생성 df = DataFrame(keyword_list, index=rank_list, columns=['검색어'])
from collections import Counter from konlpy.tag import Okt import datetime as dt #------------------------------------------------------------ # 1) 접속조건 설정하기 #------------------------------------------------------------ URL = "https://news.naver.com/" url_list = [] # 뉴스기사의 본문 URL을 저장할 리스트 #------------------------------------------------------------ # 2) 수집할 뉴스기사의 URL 조사하기 #------------------------------------------------------------ # 가져온 URL에서 링크에 대한 셀렉터를 크롤링 -> 반환결과는 List형태 # -> 여러 형식의 셀렉터를 동시에 처리해야 할 경우 콤마(,)로 구분하여 지정한다. link_list = crawler.select(URL, encoding="euc-kr", selector=".newsnow_tx_inner > a, .newsnow_imgarea > a, .mtype_img > dt > a, .mlist2 > li > a") # 가져온 결과 확인하기 for item in link_list: print(item) print("-" * 30) # 리스트의 원소들에 대한 반복 처리 for item in link_list: print(type(item.attrs)) # 각 원소(링크)에 속성들(attrs) 중에 # href 속성이 있다면 그 속성값을 별도로 준비한 리스트에 추가 if "href" in item.attrs: # href속성은 링크를 클릭했을 때의 URL을 의미한다. # URL에 뉴스 상세 페이지의 파일명인 "read.nhn"이 포함되어 있다면 # 해당 주소를 url_list에 추가한다.
from Crawler import crawler, Conversation import requests from bs4 import BeautifulSoup import re import time url = 'https://basicenglishspeaking.com/daily-english-conversation-topics/' keyword_list = [] keyword_list2 = [] keyword = crawler.select( url, selector='#tve_editor > div.thrv_wrapper.thrv-columns > div > div > div > div > p > a') for i in keyword: keyword_list.append(i.text.replace(' ', '-')) for j in keyword_list: text = re.sub('[/]', '', j) keyword_list2.append(text) print('총 {} 개의 주제를 찾았습니다.'.format(len(keyword_list2))) i = 1 for b in keyword_list2: print('({} / {})주제: {}'.format(i, len(keyword_list2), b)) i += 1 conversations = []
from Crawler import crawler naver_news_url = "https://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=105&sid2=283&oid=008&aid=0004151505" """ 웹 페이지 크롤링 - 모듈 장점 : 반복적인 코드를 함수로 묶어두고 재사용하기 때문에 전체적인 코드 구현 과정 단축 """ element = crawler.select(naver_news_url, encoding="euc-kr", selector='#articleBodyContents') # 크롤링 결과의 원소 수 만큼 반복하면서 불필요한 태그를 제거한다. for item in element: crawler.remove(item, 'script') crawler.remove(item, 'a') crawler.remove(item, 'br') crawler.remove(item, 'span', {'class': 'end_photo_org'}) # 크롤링 처리된 최종 결과 print(item.text.strip())
from Crawler import crawler from print_df import print_df from pandas import DataFrame from pandas import concat s = str(input('검색할 내용을 입력하세요 : ')) # 크롤링 할 사이트 주소 -> 네이버 쇼핑에서 "노트북"으로 검색한 결과 site_url = "https://search.shopping.rla.com/search/all.nhn?origQuery={0}&pagingIndex=1&pagingSize=80&viewType=list&sort=rel&frm=NVSHATC&query={0}".format( s) # 결과를 저장할 빈 데이터 프레임 df = DataFrame() # 상품 목록 영역 크롤링 html = crawler.select(site_url, selector=".info", encoding="utf-8") # 검색된 상품목록 영역 수 만큼 반복 for item in html: # 하나의 상품 정보를 담기 위한 빈 딕셔너리 info = {} # 상품명 추출 # -> class 이름으로 상품명 영역 추출 title_list = item.select('.tit') # -> 상품명은 하나만 존재하므로 0번째에 직접 접근하여 텍스트 추출 title = title_list[0].text.strip() # -> 추출된 결과를 빈 딕셔너리에 추가 info['제품명'] = title # 가격 추출