yhtdyhtdfjn

今天开新浪微博,才发现收藏已然有2000+了,足足104页,貌似需要整理下了,可是一页页整理,难以想象

所以想下载,然后进行提取处理,转为文档

我们关注的:

1.微博正文+评论内容

2.图片

3.视频链接

 

 

用python实现

思路:

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

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

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

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

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

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

 

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

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

 

步骤:

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

 

拿前缀

 

2.修改脚本填写\

用户名

密码

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

 

3.运行脚本

python weibo_collect.py

结果:

其中,带序号的,只能连网时点击打开有效

tmpcontent是包含所有微博内容信息,但目前还没有处理(还没想好提取成什么格式,容后再说)

 

附上脚本

 

  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():  哈尔滨网站设计 http://www.yhtd0451.com/
  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\(\\'(.*?)\\'\)\')  
  97.     try:  
  98.         login_url = p.search(text).group(1)  
  99.         #print login_url  
  100.         urllib2.urlopen(login_url)  
  101.         print "登录成功!"  
  102.     except:  
  103.         print \'Login error!\'  
  104.   
  105. #收藏页网页源代码存在current,表示当前页,判断最后页  
  106. p4currentpageid = re.compile(r\'page=(\d*)\\" \\n\\t\\t class=\\"current\\"\')  
  107.   
  108.   
  109. #新增  
  110. def download(url, save_dir, frompid=1):  
  111.     if not os.path.exists(save_dir):  
  112.         os.mkdir(save_dir)  
  113.         #os.mkdir(save_dir + os.sep + "tmp")  
  114.     i = frompid  
  115.     lastpage = ""  
  116.     content = open(save_dir + os.sep + "tmp" + "content.txt""w")  
  117.     while  True:  
  118.         source_url = url + str(i)  
  119.         print "Downloading.....", source_url  
  120.         data = urllib2.urlopen(source_url).read()  
  121.         #print data  
  122.         #拿到当前页  
  123.         current_pageid = p4currentpageid.findall(data)  
  124.         print "Current page id: ", current_pageid  
  125.         if current_pageid:  
  126.             page_id = current_pageid[0]  
  127.             #若是超出了,代表已经下载到最后一页了  
  128.             if page_id == lastpage:  
  129.                 break  
  130.             lastpage = page_id  
  131.         #保存每一页微博主体部分,转汉字,utf-8,存文件,目前是html格式,尚未进行二次处理  
  132.         lines = data.splitlines()  
  133.         for line in lines:  
  134.             if line.startswith(\'<script>STK && STK.pageletM && STK.pageletM.view({"pid":"pl_content_myFavoritesListNarrowPlus"\'):  
  135.                 print "true"  
  136.                 n = line.find(\'html":"\')  
  137.                 if n > 0:  
  138.                     j = line[n + 7: -12].encode("utf-8").decode(\'unicode_escape\').encode("utf-8").replace("\\", "")  
  139.                     content.write(j)  
  140.   
  141.         if data:  
  142.             f = open(save_dir + os.sep + str(i) + ".html""w")  
  143.             f.write(data)  
  144.             f.close()  
  145.         i += 1  
  146.     content.close()  
  147.   
  148.   
  149. def trans_to_html(f_content):  
  150.     f = open(f_content)  
  151.     detail = f.read()  
  152.     print len(detail)  
  153.     #使用lxml进行处理,xpath读取对应的内容,清理转为目标格式  
  154.     f.close()  
  155.   
  156. username = \'your account\'  
  157. pwd = \'your password\'  
  158. login(username, pwd)  
  159. begin_url = "http://weibo.com/fav?leftnav=1&wvr=3.6&page="  
  160. save_dir = "./weibo_collect"  
  161. download(begin_url, save_dir)  
  162. f_content = save_dir + os.sep + "tmp" + "content.txt"  
  163.   
  164. trans_to_html(f_content)  

分类:

技术点:

相关文章:

  • 2022-02-10
  • 2021-12-02
  • 2021-09-23
  • 2022-12-23
  • 2021-09-01
  • 2022-12-23
猜你喜欢
  • 2022-02-05
  • 2021-06-14
  • 2021-12-25
  • 2021-12-24
  • 2022-02-12
  • 2021-12-04
  • 2021-08-13
相关资源
相似解决方案