Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 크롤링
- android
- 데이터베이스
- 형태소 분석기
- n^2 배열 자르기
- 입출력
- 세션
- 개발
- 코딩
- jsp
- Python
- jdbc
- 파이썬
- 프로그래밍
- javascript
- 셀레니움
- 모바일
- java
- 이진 변환 반복하기
- 프로그래머스
- js
- 유튜브
- 메모장
- 개발자
- 자바스크립트
- MySQL
- Programmers
- 자바
- 함수형 인터페이스
- 파일 저장
Archives
- Today
- Total
개인용 복습공간
[Python] 파이썬으로 유튜브 크롤링 - 3 본문
text 크롤링을 위해 스크롤바를 내리는
코드를 작성하여 DB에 넣어보려고 한다.
저번에 이용한 테이블을 수정하여 Column을 추가한다.
유튜브에서 롤로 입력했을 때 유튜버의 이름, 채널 url을 가져와보려고 한다.
그리고 간단하게 스크롤바를 내리는 동작을 하는 코드를 작성했다.
crawl_data.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import selenium
from selenium import webdriver
from time import sleep
import time
import pymysql
# 웹 드라이버 초기화
driver = webdriver.Chrome(executable_path='chromedriver')
driver.implicitly_wait(5)
conn = pymysql.connect(host="localhost",
user="root1234",
passwd="1234",
db="crawl_data",
charset="utf8")
curs=conn.cursor(pymysql.cursors.DictCursor)
#채널url가져오는 함수
def get_channel_url():
name, url = [], []
idx1 = 1
start_url = "https://www.youtube.com/results?search_query=%EB%A1%A4&sp=CAMSBAgEEAE%253D"
driver.get(start_url)
while True:
try:
path='/html/body/ytd-app/div/ytd-page-manager/ytd-search/div[1]/ytd-two-column-search-results-renderer/div/ytd-section-list-renderer/div[2]/ytd-item-section-renderer[1]/div[3]/ytd-video-renderer[' + str(idx1) + ']/div[1]/div/div[2]'
YouTuber = driver.find_element_by_xpath(path)
name.append(YouTuber.text)
YouTuber_url = driver.find_element_by_xpath(path+'/a')
url.append(YouTuber_url.get_attribute('href'))
# 한 페이지에 약 10개 불러오는 데, 동영상 목록을 추가 불러오기 위해 스크롤 내림
if idx1 % 10 == 0 :
driver.execute_script('window.scrollBy(0, 4320);')
time.sleep(1)
idx1 +=1
except Exception as e:
print()
print(e)
break
driver.close()
return name, url
name_list, url_list = get_channel_url()
for i in range(0,len(name_list)):
print("<"+name_list[i] +", " + url_list[i]+">")
for i in range(0, len(name_list)):
sql = """insert ignore into testEx(url, name) values (%s, %s)"""
curs.execute(sql, (url_list[i], name_list[i]))
conn.commit()
conn.close()
|
cs |
스크롤을 내려주지 않으면 유튜브가 동영상을 불러오지 않아 내려주는 작업이 필요한 것 같고 xpath가
동영상 20개마다 달라지므로 20개 정도만 다뤄보았다. 생각보다 중복되는 유튜버들이 많아서 db에는
20개보다 적은 수가 insert 되었다.
유튜버 채널 url과 이름을 잘 가져온다.
셀레니움이라 느릴 줄 알았는데 생각보다 빨라서 만족스럽다.
'Python' 카테고리의 다른 글
[Python] 형태소 분석기 - konlpy (0) | 2021.06.25 |
---|---|
[Python] bs4 와 selenium (0) | 2021.06.05 |
[Python] 파이썬으로 유튜브 크롤링 - 2 (2) | 2021.05.26 |
[Python] 파이썬으로 유튜브 크롤링 - 1 (0) | 2021.05.14 |
Comments