在网上看到一篇使用程序增加个人空间人气的文章,大意是获取用户的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 />&nbsp;nFail = 0<br />&nbsp;while nFail &lt; 5:<br />&nbsp;&nbsp;try:<br />&nbsp;&nbsp;&nbsp;sock = urllib.urlopen(url)<br />&nbsp;&nbsp;&nbsp;htmlSource = sock.read()<br />&nbsp;&nbsp;&nbsp;sock.close()<br />&nbsp;&nbsp;&nbsp;return htmlSource<br />&nbsp;&nbsp;except:<br />&nbsp;&nbsp;&nbsp;nFail += 1<br />&nbsp;print &quot;get url fail:%s&quot; % (url)<br />&nbsp;return None<br /><br />###==================================================================<br />class classLister_hi(SGMLParser):<br />&nbsp;&quot;&quot;&quot;解析页面,获得要访问的url列表&quot;&quot;&quot;<br />&nbsp;def reset(self):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SGMLParser.reset(self)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.urls = []<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.bScope = False<br /><br />&nbsp;def start_td(self, attrs):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.bScope = False<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myclass = [v for k, v in attrs if k=='width']<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if myclass[0] == '297':<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.bScope = True<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass<br />&nbsp;<br />&nbsp;def start_a(self, attrs):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if self.bScope:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href = [v for k, v in attrs if k=='href']<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if href:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.urls.extend(href)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.bScope = False<br /> <br />###==================================================================<br />def main(name = '这里填百度用户名',pwd = '这里填密码'):<br />&nbsp;#socket.setdefaulttimeout(200)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;url_login=&quot;http://passport.baidu.com/?login&quot;<br />&nbsp;<br />&nbsp;cookie=cookielib.CookieJar()<br />&nbsp;cj=urllib2.HTTPCookieProcessor(cookie)<br />&nbsp;<br />&nbsp;postdata=urllib.urlencode({'username':name,'password':pwd,'mem_pass':1})<br />&nbsp;request=urllib2.Request(url_login,postdata)<br />&nbsp;<br />&nbsp;opener=urllib2.build_opener(cj)<br />&nbsp;#伪装成浏览器<br />&nbsp;opener.addheaders = [(&quot;User-Agent&quot;,&quot;Mozilla/4.0 (compatible; MSIE 7.1; Windows NT 5.1; SV1)&quot;),]&nbsp;<br />&nbsp;opener.open(request)<br /><br />&nbsp;#担心多次登录被封,只登录一次,连续爬行。也不没敢引入多线程。<br />&nbsp;for loop in range(1,287):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;loop = %d&quot; % (loop)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;= 'http://hi.baidu.com/hi/more/wonderful/good0/%d.html'&nbsp;% (loop)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;htmlContent = get_url_data(url)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if htmlContent == None:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser = classLister_hi()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser.feed(htmlContent)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser.close()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for url_hi in parser.urls:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;visit url:&quot;,url_hi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opener.open(url_hi)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;fail to open url: %s&quot; % (url_hi)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(6)#不知道百度有没有防爬机制,为了不让自己的空间被封,加6秒钟延时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(20)#为了不让自己的空间被封,加20秒钟延时,应该可以减小<br /><br />if __name__ == &quot;__main__&quot;:<br />&nbsp;print &quot;login baidu&quot;<br />&nbsp;main()