最近有点着迷Python,学习基本语法之后,首先从爬虫开始,看了《使用python登录人人网并发表状态》一文后,很感兴趣,然后又曾经苦于人人网聊天记录删除的繁琐,于是决定写一个聊天记录一键删除的小脚本,好啦,废话不多说:
#encoding:utf-8 import urllib2, urllib, cookielib, re, string class spider(): def __init__(self, email, password): self.email = email self.password = password self.domain = ‘renren.com‘ try: cookie = cookielib.CookieJar() cookieProc = urllib2.HTTPCookieProcessor(cookie) except: raise else: opener = urllib2.build_opener(cookieProc) urllib2.install_opener(opener) def login(self): print ‘login in...‘ url = ‘http://www.renren.com/PLogin.do‘ postdata = { ‘email‘:self.email, ‘password‘:self.password, ‘domain‘:self.domain } req = urllib2.Request(url, urllib.urlencode(postdata)) self.file = urllib2.urlopen(req).read() reInfo = re.compile(r"get_check:‘(.*?)‘,get_check_x:‘(.*?)‘.*?‘id‘:‘(.*?)‘", re.DOTALL) info = reInfo.findall(self.file) self.id = info[0][2] self.tok = info[0][0] self.rtk = info[0][1] print ‘login in successfully‘ def publish(self, content): #发表状态 url1 = ‘http://shell.renren.com/‘ + self.id + ‘/status‘ postdata = { ‘content‘ : content, ‘hostid‘ : self.id, ‘requestToken‘: self.tok, ‘_rtk‘ : self.rtk, ‘channel‘ : ‘renren‘ } req1 = urllib2.Request(url1, urllib.urlencode(postdata)) url_f=urllib2.urlopen(req1) self.file1 = url_f.read() return url_f
上面登陆部分代码与参考文章一样,感谢前辈,下面开始分析人人网的聊天记录,通过Firebug抓包分析可以发现,人人网留言http://gossip.renren.com中,因此楼主准备从该网页找出留言的内容及留言的id,但是后来发现每次读出的都是第一页的聊天记录,该网页的<li>模块中会调用js脚本,切换内容,楼主不知道怎么搞定,有待继续研究。。。。于是楼主取巧了,每次删光第一页,刷新页面,继续删除第一页,只到删除所有留言。
删除留言的模拟过程通过抓包就可以发现在http://gossip.renren.com/delgossip.do上,向链接发送一个如下数据即可:
postdata={
"id":comment_id,
"owner":self.id,
"age":"recent",
"requestToken":self.tok,
"_rtk":self.rtk
}
def getgossiprecent(self): #获得最近留言 url="http://gossip.renren.com/#navBar" temp_f=urllib2.urlopen(url) temp_file=temp_f.read() #获取留言总数 temp_rules=re.compile(r‘‘‘.input id=.gossipCount. type=.hidden. name=.. value=.(\d+)‘‘‘) self.gossipCount=temp_rules.findall(temp_file)[0] #获取留言 temp_rules=re.compile(r‘‘‘<span style="color:#000000"><span style="color:#000000">(.+)</span></span>‘‘‘) result=temp_rules.findall(temp_file) #获取留言id temp_rules=re.compile(r"delComment\D+(\d+)\D+(\d+)\D+(\d+)..return") self.gossip=temp_rules.findall(temp_file) self.gossip_id=[] self.gossip_guest=[] for para in self.gossip: self.gossip_id.append(para[0]) self.gossip_guest.append(para[2]) def delgossip(self,comment_id): #删除留言 url="http://gossip.renren.com/delgossip.do" postdata={ "id":comment_id, "owner":self.id, "age":"recent", "requestToken":self.tok, "_rtk":self.rtk } urllib2.urlopen(url,urllib.urlencode(postdata)) def delall(self): self.getgossiprecent() while string.atoi(self.gossipCount)>0 : for temp_id in self.gossip_id: self.delgossip(temp_id) self.getgossiprecent()
写完类对象就一切OK啦
总结:
第一次写爬虫程序,成就感满满的,人生苦短,请用Python,哈哈
如何模拟调用脚本,没搞定,另外楼主正则表达式没怎么看,代码中正则表达那部分槽点满满的。
另外楼主为了测试,把自己人人网聊天记录都删了。。。
打包程序下载地址,有需要的,传送门:http://pan.baidu.com/s/1ntLT2zf
转载请注明,谢谢