Data+

#4. 티스토리 이미지 크롤링

by Qerogram

서론

전부터 크롤링 해봐야지 해봐야지 하다가 냅뒀는데 덕질용 이미지 14만장 긁었다는 모 형님의 글을 보고 감명받아서 모방해봤다.
온라인 IDE로 하기엔 200페이지 요청도 렉이 으마으마 하다

진행과정

파이썬 2.7.13으로 코드를 작성했다.

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
#coding:utf-8
from bs4 import BeautifulSoup
import httplib, re, os
 
class TistoryCrol :
    url = "qerogram.tistory.com"
    conn = httplib.HTTPConnection(url)
    buf = 0
    soup = 0
    FinalPage = 0
    Page = 1
    Picture_list = []
    
    def __init__(self) :
        self.setPageNum()
        for x in range(1, self.FinalPage + 1) : 
            self.Downloads()
            self.Page += 1
 
        self.getList()
    
    
    def request(self, page) :
        if page == '/' : self.conn.request("GET", page)
        else : self.conn.request("GET""/?page="+str(page))
        self.buf = self.conn.getresponse()
        self.soup = BeautifulSoup(self.buf, 'lxml')
 
    def setPageNum(self) :
        self.request('/')
        filter = str(self.soup.find_all('a', attrs={'class':'number'}))
        pattern = re.compile('<span>(\d+)</span>')
        page_list = pattern.findall(filter)
        self.FinalPage = int(page_list[-1])
        
    def Downloads(self) :
        self.request(self.Page)
        filter = self.soup.find_all('span', attrs={'class':'imageblock'})
        
        if len(filter) == 0 : return
        print self.Page
    
        for element in filter:
            x = element.find('img', {'filemime':'image/jpeg'})
            if x == "" : pass
            try :self.Picture_list.append(x['src'])
            except : continue
            
 
    def getList(self) :
        print "총 갯수 : %d" % len(self.Picture_list)
        for i in range(0len(self.Picture_list)) :
            os.system("wget " +self.Picture_list[i])
        
Obj = TistoryCrol()
 
cs

블로그의 정보

Data+

Qerogram

활동하기