SMALL
정적 크롤링 - 네이버 영화 랭킹 크롤링
동적 크롤링 selenium
selenium 으로 DOM에 접근하는 방법¶
- 단일 객체 반환 (bs4의 find()와 같은 형태)
- find_element_by_id
- find_element_by_tag_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_name
- find_element_by_class_name
- find_element_by_css_selector
- 리스트 객체 반환(bs4의 find_all()과 같은 형태)
- find_elements_by_tag_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_name
- find_elements_by_class_name
- find_elements_by_css_selector
In [1]:
from selenium import webdriver
In [2]:
driver = webdriver.Chrome('chromedriver')
In [3]:
# 웹 접속하기
url = 'https://www.naver.com'
driver = webdriver.Chrome('chromedriver')
driver.get(url) # url 접속
id¶
In [5]:
url = 'https://pjt3591oo.github.io'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_id = driver.find_element_by_id('nav-trigger')
print(selected_id)
print(selected_id.tag_name)
<selenium.webdriver.remote.webelement.WebElement (session="26b7a749abf6c1254f5e1d96e84b2c8a", element="fa3701f0-adc2-4c36-a099-aff27159cac6")>
input
tag_name¶
In [8]:
url = 'https://pjt3591oo.github.io'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_tag_p = driver.find_element_by_tag_name('p')
print(selected_tag_p)
print(selected_tag_p.tag_name)
print(selected_tag_p.text)
selected_tag_p = driver.find_elements_by_tag_name('p')
print(selected_tag_p)
<selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="3b6c4f31-ee2d-44fe-8732-8cbb6999d117")>
p
2017-05-20 06:29:05 +0000 | 박정태
[<selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="3b6c4f31-ee2d-44fe-8732-8cbb6999d117")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="a1226208-a369-4b84-a97b-0807bd153d32")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="2dac8a2c-dcf5-47d0-9174-d7b41ed6863f")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="537a95ca-6426-4078-994b-ef501a5a57f1")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="7b827ab4-be1a-44b6-947b-eb2bc562ac1e")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="fa0ae9a3-508b-40c4-939e-4d82ab387907")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="730fce19-68d6-46c4-a514-cd534c2b9588")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="f84e3f02-361e-47e2-8b89-2173a00bb357")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="52e9e677-171d-426e-bf06-33657abf9f08")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="4bd85c33-8e72-4f89-afca-baa4fd2531f0")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="acf14768-6d47-4104-abce-351cc700ddf6")>, <selenium.webdriver.remote.webelement.WebElement (session="8d333bffdaabea5e3c08590f02ba9adc", element="4eca5894-d2c6-4745-aac4-edabaaf8cafb")>]
css_selector¶
- bs4의 select()와 동일
In [11]:
url = 'https://pjt3591oo.github.io'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
seleceted_selector = driver.find_element_by_css_selector('div.home div.p')
print(seleceted_selector)
print(seleceted_selector.tag_name)
print(seleceted_selector.text)
<selenium.webdriver.remote.webelement.WebElement (session="518bee95263efba7fb9a11bf9acae2b1", element="dc7f8760-91c9-4582-b174-4c1d5a5f6c4e")>
div
[programming] [react] react 작업환경 설
react를 시작하기 전에 환경셋팅을 해보자
2017-05-20 06:29:05 +0000 | 박정태
없는 요소에 접근¶
- bs4와는 다르게 없는 요소에 접근하면 에러를 띄움
In [13]:
url = 'https://pjt3591oo.github.io'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_selector = driver.find_element_by_css_selector('.a')
---------------------------------------------------------------------------
NoSuchElementException Traceback (most recent call last)
<ipython-input-13-518cf2722f07> in <module>
5 driver.get(url)
6
----> 7 selected_selector = driver.find_element_by_css_selector('.a')
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_css_selector(self, css_selector)
596 element = driver.find_element_by_css_selector('#foo')
597 """
--> 598 return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
599
600 def find_elements_by_css_selector(self, css_selector):
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value)
974 by = By.CSS_SELECTOR
975 value = '[name="%s"]' % value
--> 976 return self.execute(Command.FIND_ELEMENT, {
977 'using': by,
978 'value': value})['value']
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".a"}
(Session info: chrome=92.0.4515.107)
In [15]:
url = 'https://pjt3591oo.github.io'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected_selector = driver.find_element_by_css_selector('div.home div.p a')
selected_selector.click()
키보드 제어¶
In [16]:
url = 'https://pjt3591oo.github.io/search'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected = driver.find_element_by_css_selector('input#search-box')
selected.send_keys('test')
In [38]:
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
- page_source : 현재 웹브라우저의 HTML 코드를 가져옴
In [29]:
url = 'https://pjt3591oo.github.io/search'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
selected = driver.find_element_by_css_selector('input#search-box')
selected.send_keys('db')
selected.send_keys(Keys.ENTER)
soup = BeautifulSoup(driver.page_source, 'lxml')
items = soup.select('ul#search-results li')
for item in items:
title = item.find('h3').text
description = item.find('p').text
print(title)
print(description)
print()
Javascript Asynchronous, synchronous and Promise
동기, 비동기 그리고 promiseAsynchronous(비동기) Code란 무엇일까? node를 접하지 않았다면 대부분의 개발자들은 동기방식의 코드에 익숙할 것이다. 다음 코드를 보면 이해하기 쉬울 것이다.void FTest(){ for(int i = 0 ; i...
Structure aiohttp Of python
내용을 시작하기 앞서 python에 하면 가장 많이 떠오르는 서버 프레임워크로는 django나 flask가 있을 것이다.하지만 블로그 주인놈은 특정 프로젝트에서 굉장히 빠른 응답속도를 내야하는 API서버를 구축을 하여야 하는 상황이 있었다.이때 굉장히 많은 서버 프...
mysqldump를 이용하여 데이터 백업, 복원하기
로컬 서버에 있는 디비를 분리하기 위해 기존의 디비에 있는 데이터를 백업해야 하는 일이 생겼다. 방법은 많지만 mysqldump를 이용하여 해결을 하였다.mysqldump는 해당 내부의 데이터를 sql 문으로 전부 바꿔주는 역할을 하는 툴이다.mysqldump의 경우 ...
sequelize - Migrations[번역]
시작 하기 앞서 해당 글은 sequelize document를 직접 번역함을 알립니다. 영어를 많이 잘하지 못하여 오역이 있을 수 있습니다.sequelize 2.0.0버전은 gulp 그리고 sequelize-cli와 gulp-sequelize 결합을 기반으로 새로운...
Structure Express Of Node
Express Frameexpress는 node.js에서 제공하는 프레임워크.express-genderator를 설치를 통해 express 프로젝트 생성이 가능하다.아래의 내용은 Mysql 혹은 MariaDB, MongoDb(mongodb모듈을 통해 로우단에서 mong...
sequelize - Getting Started[번역]
시작 하기 앞서 해당 글은 sequelize document를 직접 번역함을 알립니다. 영어를 많이 잘하지 못하여 오역이 있을 수 있습니다.설치Sequelize는 NPM을 통하여 사용할 수 있다.$ npm install --save sequelize# 다음 중 하나...
docker commends
docker는 가상머신처럼 기존의 운영체제에서 다른 운영체제를 돌릴 수 있도록 해주는 기술입니다이번 포스팅에서는 도커의 명령어를 간단하게 정리를 해보도록 하겠습니다. 이미지 확인$ docker images 이미지 파일 내려받기$ docker pull [image] ...
ubuntu에 php 개발환경 셋팅
시작하기에 앞서서 필자는 docker에 ubuntu 16버전에서 셋팅을 하였습니다.ubuntu 설치 직후와 같은환경.APM설치ubuntu에 php환경을 셋팅을 해보도록 하곘습니다.도커에 우분투를 올린것은 우분투를 설치 직후와 같기때문에 패키지, apt-get을 업데이트...
mysql 원격접속하는 방법
database도 하나의 서버이기 때문에 외부에서 접속을 해야하는 경우가 있다.하지만 2가지의 이유로 접속이 불가능할 수 있다.1번째. db의 접속 ip를 제한했을 경우 이는 디비 자체에서 특정 ip대역만 접속을 허용하도록 설정하는 경우이다.2번째. 경우 유저의 접속 ...
RDBMS vs NoSQL vs InMemory
어제 뉴스를 보면서 사람은 하루에 약 2Gb의 데이터를 자동차는 사람보다 더 많은 데이터를 비행기는 테라 바이트에 가까울 정도로 생산을 해낸다는 기사를 보았습니다.저 또한 크롤러를 통해 하루에도 수많은 데이터를 만들어 내고 있습니다.그렇다면 저 수많은 데이터를 관리를 ...
sequelize - Usage[번역]
시작 하기 앞서 해당 글은 sequelize document를 직접 번역함을 알립니다. 영어를 많이 잘하지 못하여 오역이 있을 수 있습니다.데이터 검색/ 발견발견하는 함수들은 데이터 베이스로부터 데이터를 조회하기 위한 함수이다. 그들은 객체를 반한하지 않는 대신에 ...
인스타그램 로그인¶
In [33]:
import time
In [39]:
url = 'https://www.instagram.com/'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
driver.implicitly_wait(3) # 서버에서 데이터가 다 불러와질 때까지 최대 3초 / 묵시적 대기. 암시적 대기
# time.sleep(3) # 3초 쉬기
id_box = driver.find_element_by_name('username').send_keys('')
pw_box = driver.find_element_by_name('password').send_keys('')
pw_box.send_keys(Keys.ENTER) # 왜 엔터 안 먹지?
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-39-82f7d4a312b5> in <module>
11 pw_box = driver.find_element_by_name('password').send_keys('hter4280!@')
12
---> 13 pw_box.send_keys(Keys.ENTER)
AttributeError: 'NoneType' object has no attribute 'send_keys'
In [51]:
url = 'https://www.naver.com'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
driver.implicitly_wait(15) # 묵시적 대기, 활성화를 최대 15초 대기한다
# 네이버에 고슴도치 검색하기
search_box = driver.find_element_by_css_selector('input#query')
search_box.send_keys('고슴도치')
search_box.send_keys(Keys.ENTER)
time.sleep(2)
# search_btn = driver.find_element_by_css_selector('button#search_btn').click()
# 지식백과 고슴도치 클릭
posts = driver.find_elements_by_css_selector('a.lnk_tit')
posts[0].click()
스타벅스 매장 리스트 크롤링¶
In [59]:
url = 'https://www.starbucks.co.kr/store/store_map.do?disp=locale'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
driver.implicitly_wait(5)
mycities = driver.find_elements_by_css_selector('a.set_sido_cd_btn')
mycities[5].click()
time.sleep(3)
guguns = driver.find_elements_by_css_selector('a.set_gugun_cd_btn')
guguns[10].click()
time.sleep(3)
soup = BeautifulSoup(driver.page_source, 'lxml')
items = soup.select('ul.quickSearchResultBoxSidoGugun li.quickResultLstCon')
for item in items:
title = item.find('strong').text
description = item.find('p').text
print(title)
print(description)
print()
하단중앙
부산광역시 사하구 낙동남로 1411 (하단동)1522-3232
부산괴정역
부산광역시 사하구 사하로186번길 6 (괴정동)1522-3232
부산동아대
부산광역시 사하구 낙동대로550번길 14 (하단동) 1~3층1522-3232
을숙도강변DT
부산광역시 사하구 하신번영로 381-6 (하단동)1522-3232
다대포DT
부산광역시 사하구 다대로 493 (다대동)1522-3232
부산하단
부산광역시 사하구 낙동대로 455 (하단동)1522-3232
다대포비치
부산광역시 사하구 다대로 714 (다대동)1522-3232
In [ ]:
LIST
'빅데이터' 카테고리의 다른 글
파이썬 웹크롤링 (0) | 2021.08.03 |
---|---|
[판다스] 열 삭제하기, 열방향으로 연결, merge, 누락값 처리, 중복 데이터 처리, melt, concat으로 데이터 프레임에 열 추가하기 ... (0) | 2021.07.29 |
[판다스] 데이터프레임, 시리즈 , LOC, ILOC, 행과 열 추출, 연산 등 (0) | 2021.07.27 |
python-day02 (0) | 2021.07.22 |
python-day01 (0) | 2021.07.22 |