python爬虫之python2.7.8抓取csdn博客文章

通过PyInstaller-2.1,可以将Python2.7.8编写的爬虫程序打包成Windows平台的exe执行文件。在打包前需要安装pywin32-219.win32-py2.7.exe库。打包后的exe文件可以在CSDN下载,链接为http://download.csdn.net/detail/xuwei_xuwei/8160777。
摘要由CSDN通过智能技术生成
1.简介
python爬虫是python应用的一个重要方便,最近用高Python2.7.8(只所以没有选最新的3.4,是因为有些模块还没有移植到最新python版本)写了一个小例子,在调试过程中碰到的最头疼的问题是中文乱码和正则表达式,要解决这两个问题,办法有,python源文件一定要用utf-8编码格式保存,每个python文件开头这样写, 
import sys;
reload(sys);
sys.setdefaultencoding('utf-8');
告诉python解释器,字符串是utf-8格式,或者字符串这样写u'python utf-8 字符串',还有就是正则表达式也要用u''这种格式,总是尽一切可能保证你用的每个字符串都是用utf-8就能很好的避免乱码的问题,
用的开发环境是python2.7.8 和 vs2010 + ptvs插件
2.源码
import urllib;
import urllib2;
import time;
import thread;
import threading;
import re;
import os;
import types;
import codecs;
import sys;
#判断一个字符串是不是int类型
def IsInt(intStr):
    try:
        int(intStr);
        return True;
    except:
        return False;
class XuwBot:
    def __init__(self):    
        self.userCode = 'XuWei_XuWei'; #默认抓取当前用户的文章
        self.articleType = '-1';#要抓取的文章类别
        self.startPageNum = 1;#抓取的起始页
        self.endPageNum = -1;#抓取的结束页
        self.currentPageNum = 1;#当前正在抓取的页
        self.downloadContainer = [];#存放要下载的文章的地址,下载线程从此容器获取地址,下载保存文章,
        self.threadLock = threading.Lock();#线程锁
        self.exitFlag = False;
    #爬取文章列表
    def GetArticleList(self):
        reqUrl = 'http://blog.csdn.net/' + str(self.userCode) + '/article/list/' + str(self.currentPageNum);#请求地址
        headersData = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0'};#请求头,伪装成ff浏览器,用的是我本机ff的请求头
        req = urllib2.Request(reqUrl,headers = headersData);
        timeout = 20;#请求超时时间
        req.timeout = timeout;
        print(u'开始请求第'+ str(self.currentPageNum) + u'页文章列表');
        try :
            opener = urllib2.urlopen(req);#获取opener
            articlePageSource =  opener.read().decode('utf-8');#csdn本身页面也是用utf-8编码的
        except:
            print(u'请求第' + str(self.currentPageNum) + u'页文章列表出错,将跳过爬取本页列表');
            articlePageSource = '';
            pass;
        #通过正则表达式查找文章和尾页数
        if (self.endPageNum == -1):
            pageListText = re.findall(u'<div.*?id="papelist".*?class="pagelist">(.*?)</div>',articlePageSource,re.S);
            pageNumText = re.findall(u'共[0-9]{1,}页',pageListText[0],re.S);
            articleNumText = re.findall(u'[0-9]{1,}条数据',pageListText[0],re.S);
            pageNum = i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值