๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋๋ ํฌ๋กค๋ง ํ๋๋ฒ
https://10000sukk.tistory.com/3
์ธ์คํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ด์ง, ์ฆ, ๊ทธ์๋ง๋ ๋ฐฉ์์ผ๋ก ํฌ๋กค๋ง ์๊ตฌ๋ฉ๋๋ค.
์ ๋ ๋ฏธํกํ์ง๋ง ํ์ด์ง๋ฅผ ํฌ๋กค๋ง ํ๊ธฐ์ํด ์๋ก ๋ถ๋ฌ์ค๊ณ ํฌ๋กค๋ง ํ๊ณ -> ์๋ก ๋ถ๋ฌ์ค๊ณ ํฌ๋กค๋งํ๊ณ -> ์๋ก ๋ถ๋ฌ....-> (๋ฐ๋ณต)
ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
์๋ก ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ selenium์ ์ด์ฉํ๋๋ฐ
์คํฌ๋กค์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋๋ค.
ํ์ด์ง์ ์คํฌ๋กค์ ๋ด๋ ค์ ๋ง์ฝ ์คํฌ๋กค ์์น๊ฐ ๋ณํ์ผ๋ฉด ๋ด๋ ค์ง๊ฑฐ๊ณ ์๋ด๋ ค ๊ฐ์ผ๋ฉด ํ์ด์ง์ ๋์ด๊ฒ ์ฃ ?
์คํฌ๋กค ๋ด๋ฆฌ๋ ๋ฐฉ๋ฒ:
while True:
time.sleep(SCROLL_PAUASE_TIME)
#์คํฌ๋กค์ ๋ด๋ ค์ค๋ค
last_height = driver.execute_script("return document.body.scrollHeight")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUASE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUASE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
else:
last_height = new_height
continue
์ผ๋ก ์คํฌ๋กค์ ๋ด๋ ค์ค๋๋ค!
๊ทธ๋ค์์ ํ์ด์ง๋ฅผ BeautifulSoup์ ์ด์ฉํด์ ์๋ก ํ์ฑํ๊ณ ๊ฐ์ ธ์ต๋๋ค...
ํ๋ฒ ํด๋ด ์๋ค..!
์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋จผ์ ํ ํ ๋จ์๋ก tag๋ฅผ ๊ฐ์ ธ์ฌ๊ฒ์ด๋ค....
list1 = soup.find_all(name='div', attrs={'class': 'Nnq7C weEfm'})
๊ทธ๋ฆฌ๊ณ ์คํฌ๋กค์ ๋ด๋ ค์ ๋ค์ ํ์ฑํ๊ณ ๊ฐ์ ธ์ค๋ฉด
list2 = soup.find_all(name='div', attrs={'class': 'Nnq7C weEfm'})
์์ ๊ทธ๋ฆผ์ฒ๋ผ ์๊น ๊ฐ์ ธ์จ list1๊ณผ ์ง๊ธ ๊ฐ์ ธ์จ list2๊ฐ ์ผ๋ถ๋ถ ๊ฒน์น๊ฒ ๋๋ค... ์ด ๊ฒน์น๋ ๋ถ๋ถ์ ์ ๊ฑฐํด ์ฃผ๋๊ฒ ํต์ฌ์ธ๊ฒ๊ฐ๋ค!
11~13 ๊ฐ ์ ๋๊ฐ ๊ฒน์น๋ค. ๊ทธ๋์ ๋๋ ๊ทธ๋ฅ list2์ index 10๋ฒ ๋ถํฐ๋ง list1์ ํฌํจ ๋์๋์ง ๊ฒ์ฌ ํ๋ฉด์ ๋ง์ฝ ํฌํจ ์๋ฌ์ผ๋ฉด ํฌ๋กค๋ง์ ํด์ฃผ์๋ค.
์์ ๋งํ ๋๊ฐ์ง ์ ์ด ์ธ์คํ ํฌ๋กค๋ง์ ํต์ฌ ๋ถ๋ถ์ด๋ฉฐ ๋ฌด์ ์ฌ ํฌ๋กค๋ง์์ ์ด ๋๊ฐ์ง ์ ๋ง ์ถ๊ฐ ํ๋ฉด ๋๋๊ฒ์ด๋ค...
๋ค์ ๋งํ๊ฒ ๋ค.
1. selenium์ผ๋ก ์คํฌ๋กค์ ๋ด๋ ค์ค๋ค
2. ์คํฌ๋กค์ ๋ด๋ฆฐํ์ ๋ค์ ํ์ฑํ์๋ ๊ฒน์น๋ ๋ถ๋ถ์ ๊ณ ๋ ค ํด์ค๋ผ -> ์ผ๋ง๋งํผ ๊ฒน์น๋์ง ์ง์ ์คํํด๋ณด๊ณ ์ ๋๋ฆฌ ์๊ฒ ๊ฒ์ฌํ๋ฉด ํฌ๋กค๋ง ์๋ ํฅ์ ๊ฐ๋ฅํจ...
์ถ๊ฐ๋ก ์ ๋ ์ด๋ฏธ์ง ์ ๋ณด์ค์์
์ด๋ฐ ๊ฒ๋ค๋ง ํ์ํ๊ธฐ์... ์ ๊ท ํํ์์ ์ด์ฉํด์....
alt = re.compile('.*์ฌ๋ 1๋ช ์ด์.*์ฌ๋๋ค์ด ์ ์์.*')
if alt.match(str(j.attrs['alt'])) != None:
์ด๋ฐ ํ์์ผ๋ก ํ์ต๋๋ค... ๋จผ์ re.compile(์ฐพ๊ณ ์ถ์ ๋ฌธ์์ ์ ๊ทํํ์) ์ผ๋ก ๋ด๊ฐ ์ํ๋ ๋ฌธ์ ํ์์ ์ ๊ทํํ์์ ๋ฃ๊ณ .
๊ทธ ๋ค์์ match๋ผ๋ ํจ์๋ก ๋ด๊ฐ ๋ฐฉ๊ธ ์ ๊ทํํ์์ ์ ์ฅํ ๋ณ์ alt์ ๊ดํธ์ ๋ฌธ์๊ฐ ์ผ์น๋๋์ง ๊ฒ์ฌํด์ ์ผ์น๋๋ฉด ~~~~ ๋ฅผ ๋ฐํํ์ต๋๋ค... ์ฆ, ์ผ์น๋๋ฉด != None์ด๊ณ ์ผ์น๋์ง ์์ผ๋ฉด None์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
๋ ๋์ ๋ฐฉ๋ฒ ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์! ๋ง์ด ๋ฏธํกํฉ๋๋ค!!!
์ฝ๋.
from urllib.parse import quote_plus #์์คํค ์ฝ๋๋ก ๋ณํํด์ค๋ค
from selenium import webdriver
import time
from bs4 import BeautifulSoup
import re
import urllib.request
def notMatch(list, a):
n = 0
for i in list:
if a == i:
n = 1
break
if n == 1:
return 0
else:
return 1
baseUrl1 = 'https://www.instagram.com/explore/tags/'
baseUrl2 = '/?hl=ko'
plusUrl = input('ํฌ๋กค๋งํ ํด์ํ๊ทธ๋ฅผ ์
๋ ฅํ์์ค: ')
url = baseUrl1 + quote_plus(plusUrl) +baseUrl2
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3) #์์์ ๋ถ๋ฌ์ค๊ณ 3์ด ๊ธฐ๋ค๋ฆฐํ์ ๋ถ์์ ์์
reallist =[]
list1 = [] #old list
list2 = [] #new list
totalCount = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/header/div[2]/div[1]/div[2]/span/span').text
print("์ด ๊ฒ์๋ฌผ์ : " + totalCount)
fileNumber = 1
alt = re.compile('.*์ฌ๋ 1๋ช
์ด์.*์ฌ๋๋ค์ด ์ ์์.*')
pageString = driver.page_source
soup = BeautifulSoup(pageString, features='html.parser')
list1 = soup.find_all(name='div', attrs={'class': 'Nnq7C weEfm'})
for i in list1:
temp = i.find_all(name='img')
for j in temp:
try:
if alt.match(str(j.attrs['alt'])) != None:
urllib.request.urlretrieve( j.attrs['src'] , "C:\\Users\\PycharmProjects\\untitled7\\img\\์ธ์คํ\\" +str(plusUrl) + "(" + str(fileNumber) + ")" + ".jpg")
fileNumber += 1
except:
continue
SCROLL_PAUASE_TIME = 1.5
n = 1
while True:
time.sleep(SCROLL_PAUASE_TIME)
#์คํฌ๋กค์ ๋ด๋ ค์ค๋ค
last_height = driver.execute_script("return document.body.scrollHeight")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUASE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUASE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
else:
last_height = new_height
continue
time.sleep(SCROLL_PAUASE_TIME)
#๋ค์ ํ์ฑํ๋ค
pageString = driver.page_source
soup = BeautifulSoup(pageString, features='html.parser')
list2 = soup.find_all(name='div', attrs={'class': 'Nnq7C weEfm'})
for i in range(10, len(list2)):
try:
if notMatch(list1, list2[i]) == 1:
temp = list2[i].find_all('img')
for j in temp:
try:
if alt.match(str(j.attrs['alt'])) != None:
urllib.request.urlretrieve(j.attrs['src'], "C:\\Users\\PycharmProjects\\untitled7\\img\\์ธ์คํ\\" + str(plusUrl) + "(" + str(fileNumber) + ")" + ".jpg")
fileNumber += 1
except:
continue
except:
continue
list1 = list2
Colored by Color Scripter
'๊ธฐํ(๊ฐ๋ฐ) > ํฌ๋กค๋ง(Crawling)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python]๋ฌด์ ์ฌ ํฌ๋กค๋ง ํ๊ธฐ Crawling (0) | 2019.11.29 |
---|