爬虫的修养-博客篇

  1. 此次的爬虫对象是:http://blog.csdn.net/sinyu890807的文章
  2. 请务必理解:python的基础(http://www.cnblogs.com/courtier/p/4285897.html),urllib基本使用,了解http协议
  • 首先,为了不让服务器报403,我们必须设置个能随机User-Agent的列表:
#user_agent

    _header = ['Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30'

          ,'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',

          'Mozilla/5.0 (Windows; U; Windows NT 5.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12'];
  • 接下来,让他们随机并设置消息头:
def connectURL(self,page):

        print "正在连接....."



        head = random.choice(self._header);



        req = urllib2.Request(page);



        req.add_header('User-Agent',self._header);

        req.add_header('Host','blog.csdn.net');

        req.add_header('Referer','http://blog.csdn.net/');

        req.add_header('GET',page);

        #页面的全部内容

        return urllib2.urlopen(req).read();
  • 把爬虫爬到的内容,用正则来获取我们需要的:
def parseTolist(self,info):

        li = [];

        reg = r'<span class="link_title"><a href="(/guolin_blog/article/details/[0-9]+)">([^v]*)(?=</a>)';

        pat = re.compile(reg);#编译正则

         Blog_Link = re.findall(pat,info);

        #print Blog_Link;

        for i in Blog_Link:

            msg = i[1].replace("\r\n        ","");

            li.append(msg+':'+'http://blog.csdn.net'+i[0]);

        return li;
  • 调用一下,下面面的方法(默认是放到”D:\\python\\link.txt”):
def wisdomBug(self):

         #打印页面

            for k in range(1,self.pagecount):

            page = self.url+str(k);

            print '引擎正在:'+page;

            #parese--文章列表

            info = self.connectURL(page);

            li = self.parseTolist(info);

            #save --保存

            for i in li:

                f = open("D:\\python\\link.txt",'a');

                f.write(i+os.linesep*2);

                f.close();
  • 最后,我们可以看下我们的执行效果:

QQ图片20150211234636 QQ图片20150211234725

源代码:(https://github.com/aliencool/Python/blob/master/connect.py)

  • 唠叨语:

        如果,有些网站动态User-Agent无法使用,那就要更高级的“代理IP”来使用了。其实,用Python坐爬虫可以做很多事情的,比如,

        查12306车票呀、爬一些新闻文章。我的此次博文个人总结只是入门级别,还有很多好的爬虫框架可以爬取更多信息更高效(多线程)

        希望,我们一起能继续深入,提供更好的博文。

你可能感兴趣的:(爬虫)