파 이 썬 파충류 csdn 블 로그 잡기

파 이 썬 파충류 csdn 블 로그 잡기
        어젯밤 한 csdn 큰 소 를 저장 하 는 모든 블 로 그 를 다운로드 하기 위해 파충류 가 글 을 자동 으로 캡 처 하여 txt 텍스트 에 저장 하 였 으 며, 당연히 html 페이지 에 저장 할 수 있 습 니 다.이렇게 하면 Ctrl + C 와 Ctrl + V 를 사용 하지 않 아 도 되 고 매우 편리 하 며 다른 사 이 트 를 캡 처 하 는 것 도 대동소이 하 다.
캡 처 한 웹 페이지 를 분석 하기 위해 제3자 모듈, BeautifulSoup 을 사 용 했 습 니 다. 이 모듈 은 html 파일 을 분석 하 는 데 매우 유용 합 니 다. 물론 정규 표현 식 으로 도 해석 할 수 있 지만 귀 찮 습 니 다.
csdn 사이트 의 robots. txt 파일 에 파충류 금지 가 표시 되 어 있 기 때문에 파충 류 를 브 라 우 저 로 위장 해 야 합 니 다. 자주 잡 을 수 없습니다. sleep 은 잠시 후에 잡 아야 합 니 다. 자주 사용 하면 ip 이 차단 되 지만 프 록 시 ip 을 사용 할 수 있 습 니 다.
#-*- encoding: utf-8 -*-
'''
Created on 2014-09-18 21:10:39

@author: Mangoer
@email: [email protected]
'''

import urllib2
import re
from bs4 import BeautifulSoup
import random
import time

class CSDN_Blog_Spider:
     def __init__(self,url):

          print '
'           print(' 。。。')           print  ' : ' + url           user_agents = [                     'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',                     'Opera/9.25 (Windows NT 5.1; U; en)',                     'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',                     'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',                     'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',                     'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',                     "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",                     "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ",                    ]           # use proxy ip            # ips_list = ['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118',           #           '1.50.235.82:80','203.80.144.4:80']           # ip = random.choice(ips_list)           # print ' ip : ' + ip           # proxy_support = urllib2.ProxyHandler({'http':'http://'+ip})           # opener = urllib2.build_opener(proxy_support)           # urllib2.install_opener(opener)           agent = random.choice(user_agents)           req = urllib2.Request(url)           req.add_header('User-Agent',agent)           req.add_header('Host','blog.csdn.net')           req.add_header('Accept','*/*')           req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list')           req.add_header('GET',url)           html = urllib2.urlopen(req)           page = html.read().decode('gbk','ignore').encode('utf-8')           self.page = page           self.title = self.getTitle()           self.content = self.getContent()           self.saveFile()                 def printInfo(self):           print(' :   '+self.title + '
')                    print(' out.txt !')      def getTitle(self):           rex = re.compile('<title>(.*?)</title>',re.DOTALL)                     match = rex.search(self.page)           if match:                 return match.group(1)           return 'NO TITLE'      def getContent(self):           bs = BeautifulSoup(self.page)           html_content_list = bs.findAll('div',{'id':'article_content','class':'article_content'})           html_content = str(html_content_list[0])           rex_p = re.compile(r'(?:.*?)>(.*?)<(?:.*?)',re.DOTALL)           p_list = rex_p.findall(html_content)           content = ''           for p in p_list:                if p.isspace() or p == '':                     continue                content = content + p           return content      def saveFile(self):                      outfile = open('out.txt','a')           outfile.write(self.content)      def getNextArticle(self):           bs2 = BeautifulSoup(self.page)           html_nextArticle_list = bs2.findAll('li',{'class':'prev_article'})           # print str(html_nextArticle_list[0])           html_nextArticle = str(html_nextArticle_list[0])           # print html_nextArticle           rex_link = re.compile(r'<a href=\"(.*?)\"',re.DOTALL)           link = rex_link.search(html_nextArticle)           # print link.group(1)           if link:                next_url = 'http://blog.csdn.net' + link.group(1)                return next_url           return None class Scheduler:      def __init__(self,url):           self.start_url = url      def start(self):           spider = CSDN_Blog_Spider(self.start_url)           spider.printInfo()           while True:                if spider.getNextArticle():                     spider = CSDN_Blog_Spider(spider.getNextArticle())                     spider.printInfo()                elif spider.getNextArticle() == None:                     print 'All article haved been downloaded!'                     break                time.sleep(10) #url = input(' CSDN :') url = "http://blog.csdn.net/mangoer_ys/article/details/38427979" Scheduler(url).start()

프로그램 에서 해결 할 수 없 는 문제 가 있 습 니 다. 제목 으로 파일 이름 을 지 을 수 없 기 때문에 모든 글 은 out. txt 에 놓 여 있 습 니 다. 인 코딩 문 제 를 말 합 니 다. 신 이 이 문 제 를 해결 하 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기