在网上看到一篇使用程序增加个人空间人气的文章,大意是获取用户的id号,然后使用爬虫将所有的空间/博客爬一遍,这样自己的头像就出现在别人空间的最近访客中 了。出于好奇,被访问的人可能会回访,从而达到自己空间的访问率增加。如果按2%的概率来算,那么去爬1万个空间也就有200个人回访了。这个比较有意 思,比找代理去刷自己空间的强,毕竟是真的有人来看了,就像真的做了一回广告一样。也不用做自动关水机(为了博客得已发表,不得已故意写了错别字),自然也不会引起对方的反感。<br /><br /> 根据这个思路,我昨天花了十几分钟调试出来了一个脚本,将百度空间的12×256个用户访问了一遍,可惜收效甚微,没有看到访问量有大幅增加。我想,要么是访问的空间太少了,要么就是程序出错了,要么就是回访的概率太少。写着玩的,无所谓了,呵呵。<br /><br /> 进一步的思路有:让爬虫终日在网络上爬行(自己的机器或者使用GAE),多线程,每访问一个空间就顺便访问他的最近访客或者好友链接,从而实现蜘蛛爬行,这样源源不断地获得访问地址。<br /><br /> 参考代码如下,仅供学习研究Python使用,不可用于其他非法目的。<br /><br /># -*- coding: utf-8 -*-<br />#coding = utf-8<br /><br />import time<br />import urllib,urllib2,httplib,cookielib,os,socket<br />from sgmllib import SGMLParser<br /><br /><br />###==================================================================<br />def get_url_data(url):<br /> nFail = 0<br /> while nFail < 5:<br /> try:<br /> sock = urllib.urlopen(url)<br /> htmlSource = sock.read()<br /> sock.close()<br /> return htmlSource<br /> except:<br /> nFail += 1<br /> print "get url fail:%s" % (url)<br /> return None<br /><br />###==================================================================<br />class classLister_hi(SGMLParser):<br /> """解析页面,获得要访问的url列表"""<br /> def reset(self): <br /> SGMLParser.reset(self)<br /> self.urls = []<br /> self.bScope = False<br /><br /> def start_td(self, attrs):<br /> self.bScope = False<br /> myclass = [v for k, v in attrs if k=='width']<br /> try:<br /> if myclass[0] == '297':<br /> self.bScope = True<br /> except:<br /> pass<br /> <br /> def start_a(self, attrs):<br /> if self.bScope:<br /> href = [v for k, v in attrs if k=='href']<br /> if href:<br /> self.urls.extend(href)<br /> self.bScope = False<br /> <br />###==================================================================<br />def main(name = '这里填百度用户名',pwd = '这里填密码'):<br /> #socket.setdefaulttimeout(200) <br /> url_login="http://passport.baidu.com/?login"<br /> <br /> cookie=cookielib.CookieJar()<br /> cj=urllib2.HTTPCookieProcessor(cookie)<br /> <br /> postdata=urllib.urlencode({'username':name,'password':pwd,'mem_pass':1})<br /> request=urllib2.Request(url_login,postdata)<br /> <br /> opener=urllib2.build_opener(cj)<br /> #伪装成浏览器<br /> opener.addheaders = [("User-Agent","Mozilla/4.0 (compatible; MSIE 7.1; Windows NT 5.1; SV1)"),] <br /> opener.open(request)<br /><br /> #担心多次登录被封,只登录一次,连续爬行。也不没敢引入多线程。<br /> for loop in range(1,287):<br /> print "loop = %d" % (loop)<br /> url = 'http://hi.baidu.com/hi/more/wonderful/good0/%d.html' % (loop)<br /><br /> htmlContent = get_url_data(url)<br /> if htmlContent == None:<br /> continue<br /> parser = classLister_hi()<br /> parser.feed(htmlContent)<br /> parser.close()<br /><br /> for url_hi in parser.urls:<br /> print "visit url:",url_hi<br /> try:<br /> opener.open(url_hi)<br /> except:<br /> print "fail to open url: %s" % (url_hi)<br /> time.sleep(6)#不知道百度有没有防爬机制,为了不让自己的空间被封,加6秒钟延时<br /> time.sleep(20)#为了不让自己的空间被封,加20秒钟延时,应该可以减小<br /><br />if __name__ == "__main__":<br /> print "login baidu"<br /> main()
增加博客空间人气的脚本
增加博客空间人气的脚本
...