- 此次的爬虫对象是:http://blog.csdn.net/sinyu890807的文章
- 请务必理解: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();
- 最后,我们可以看下我们的执行效果:
源代码:(https://github.com/aliencool/Python/blob/master/connect.py)
-
唠叨语:
如果,有些网站动态User-Agent无法使用,那就要更高级的“代理IP”来使用了。其实,用Python坐爬虫可以做很多事情的,比如,
查12306车票呀、爬一些新闻文章。我的此次博文个人总结只是入门级别,还有很多好的爬虫框架可以爬取更多信息更高效(多线程)
希望,我们一起能继续深入,提供更好的博文。