登陆新浪微博&批量下载收藏内容

1.脚本模拟登陆新浪微博,保存cookie

2.有了cookie信息后,访问收藏页面url

3.从第一页开始,逐步访问,直到最后,脚本中进行了两步处理

   A.直接下载网页(下载到本地,当然,要看的时候需要联网,因为js,图片神马的,都还在)

   B.解析出微博需要的内容,目前只是存下来,还没有处理

       后续会用lxml通过xpath读取,转换成文档,当然,图片和视频链接也会一同处理,目前未想好处理成什么格式。(困了,明后天接着写)


模拟登陆微博采用是http://www.douban.com/note/201767245/

里面很详细,直接拉来用了


步骤:

1.进入自己的微博,右侧,收藏,进入收藏页面

http://weibo.com/fav?leftnav=1&wvr=3.6&page=1

拿前缀


2.修改脚本填写\

用户名

密码

前缀http://weibo.com/fav?leftnav=1&wvr=3.6&page=


  1. #!/usr/bin/env python  
  2. #coding=utf8  
  3. import urllib  
  4. import urllib2  
  5. import cookielib  
  6. import base64  
  7. import re  
  8. import json  
  9. import hashlib  
  10. import os  
  11.   
  12.   
  13. #login code from:  http://www.douban.com/note/201767245/  
  14. #加了下注释  
  15.   
  16. # cookie -> opener -> urllib2.  
  17. # 然后,urllib2的操作相关cookie会存在  
  18. # 所以登陆成功之后,urllib2的操作会带有cookie信息,抓网页不会跳转到登陆页  
  19. cookiejar = cookielib.LWPCookieJar()  
  20. cookie_support = urllib2.HTTPCookieProcessor(cookiejar)  
  21. opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
  22. urllib2.install_opener(opener)  
  23.   
  24. postdata = {  
  25.     'entry''weibo',  
  26.     'gateway''1',  
  27.     'from''',  
  28.     'savestate''7',  
  29.     'userticket''1',  
  30.     'ssosimplelogin''1',  
  31.     'vsnf''1',  
  32.     'vsnval''',  
  33.     'su''',  
  34.     'service''miniblog',  
  35.     'servertime''',  
  36.     'nonce''',  
  37.     'pwencode''wsse',  
  38.     'sp''',  
  39.     'encoding''UTF-8',  
  40.     'url''http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',  
  41.     'returntype''META'  
  42. }  
  43.   
  44.   
  45. def get_servertime():  
  46.     url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939'  
  47.     data = urllib2.urlopen(url).read()  
  48.     p = re.compile('\((.*)\)')  
  49.     try:  
  50.         json_data = p.search(data).group(1)  
  51.         data = json.loads(json_data)  
  52.         servertime = str(data['servertime'])  
  53.         nonce = data['nonce']  
  54.         return servertime, nonce  
  55.     except:  
  56.         print 'Get severtime error!'  
  57.         return None  
  58.   
  59.   
  60. def get_pwd(pwd, servertime, nonce):  
  61.     pwd1 = hashlib.sha1(pwd).hexdigest()  
  62.     pwd2 = hashlib.sha1(pwd1).hexdigest()  
  63.     pwd3_ = pwd2 + servertime + nonce  
  64.     pwd3 = hashlib.sha1(pwd3_).hexdigest()  
  65.     return pwd3  
  66.   
  67.   
  68. def get_user(username):  
  69.     username_ = urllib.quote(username)  
  70.     username = base64.encodestring(username_)[:-1]  
  71.     return username  
  72.   
  73.   
  74. def login(username, pwd):  
  75.   
  76.     url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)'  
  77.     try:  
  78.         servertime, nonce = get_servertime()  
  79.     except:  
  80.         return  
  81.     global postdata  
  82.     postdata['servertime'] = servertime  
  83.     postdata['nonce'] = nonce  
  84.     postdata['su'] = get_user(username)  
  85.     postdata['sp'] = get_pwd(pwd, servertime, nonce)  
  86.     postdata = urllib.urlencode(postdata)  
  87.     headers = {'User-Agent''Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}  
  88.   
  89.     req = urllib2.Request(  
  90.         url=url,  
  91.         data=postdata,  
  92.         headers=headers  
  93.     )  
  94.     result = urllib2.urlopen(req)  
  95.     text = result.read()  
  96.     #p = re.compile('location\.replace\(\'(.*?)\'\)')  
  1.     p = re.compile(r'location.replace\("(.*)"\)')  
  2.     try:  
  3.         login_url = p.search(text).group(1)  
  4.         #print login_url  
  5.         urllib2.urlopen(login_url)  
  6.         print "登录成功!"  
  7.     except:  
  8.         print 'Login error!'  
  9.   
  10. #收藏页网页源代码存在current,表示当前页,判断最后页  
  11. p4currentpageid = re.compile(r'page=(\d*)\\" \\n\\t\\t class=\\"current\\"')  
  12.   
  13.   
  14. #新增  
  15. def download(url, save_dir, frompid=1):  
  16.     if not os.path.exists(save_dir):  
  17.         os.mkdir(save_dir)  
  18.         #os.mkdir(save_dir + os.sep + "tmp")  
  19.     i = frompid  
  20.     lastpage = ""  
  21.     content = open(save_dir + os.sep + "tmp" + "content.txt""w")  
  22.     while  True:  
  23.         source_url = url + str(i)  
  24.         print "Downloading.....", source_url  
  25.         data = urllib2.urlopen(source_url).read()  
  26.         #print data  
  27.         #拿到当前页  
  28.         current_pageid = p4currentpageid.findall(data)  
  29.         print "Current page id: ", current_pageid  
  30.         if current_pageid:  
  31.             page_id = current_pageid[0]  
  32.             #若是超出了,代表已经下载到最后一页了  
  33.             if page_id == lastpage:  
  34.                 break  
  35.             lastpage = page_id  
  36.         #保存每一页微博主体部分,转汉字,utf-8,存文件,目前是html格式,尚未进行二次处理  
  37.         lines = data.splitlines()  
  38.         for line in lines:  
  39.             if line.startswith('<script>STK && STK.pageletM && STK.pageletM.view({"pid":"pl_content_myFavoritesListNarrowPlus"'):  
  40.                 print "true"  
  41.                 n = line.find('html":"')  
  42.                 if n > 0:  
  43.                     j = line[n + 7: -12].encode("utf-8").decode('unicode_escape').encode("utf-8").replace("\\", "")  
  44.                     content.write(j)  
  45.   
  46.         if data:  
  47.             f = open(save_dir + os.sep + str(i) + ".html""w")  
  48.             f.write(data)  
  49.             f.close()  
  50.         i += 1  
  51.     content.close()  
  52.   
  53.   
  54. def trans_to_html(f_content):  
  55.     f = open(f_content)  
  56.     detail = f.read()  
  57.     print len(detail)  
  58.     #使用lxml进行处理,xpath读取对应的内容,清理转为目标格式  
  59.     f.close()  
  60.   
  61. username = 'your account'  
  62. pwd = 'your password'  
  63. login(username, pwd)  
  64. begin_url = "http://weibo.com/fav?leftnav=1&wvr=3.6&page="  
  65. save_dir = "./weibo_collect"  
  66. download(begin_url, save_dir)  
  67. f_content = save_dir + os.sep + "tmp" + "content.txt"  
  68.   
  69. trans_to_html(f_content) 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值