激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python實現(xiàn)登陸知乎獲得個人收藏并保存為word文件

python實現(xiàn)登陸知乎獲得個人收藏并保存為word文件

2019-12-02 16:18junjie Python

這篇文章主要介紹了python實現(xiàn)登陸知乎獲得個人收藏并保存為word文件,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下

這個程序其實很早之前就完成了,一直沒有發(fā)出了,趁著最近不是很忙就分享給大家.

使用BeautifulSoup模塊和urllib2模塊實現(xiàn),然后保存成word是使用python docx模塊的,安裝方式網(wǎng)上一搜一大堆,我就不再贅述了.

主要實現(xiàn)的功能是登陸知乎,然后將個人收藏的問題和答案獲取到之后保存為word文檔,以便沒有網(wǎng)絡的時候可以查閱.當然,答案中如果有圖片的話也是可以獲取到的.不過這塊還是有點問題的.等以后有時間了在修改修改吧.

還有就是正則,用的簡直不要太爛…鄙視下自己…

還有,現(xiàn)在是問題的話所有的答案都會保存下來的.看看有時間修改成只保存第一個答案或者收藏頁問題的答案吧.要不然如果收藏的太多了的話保存下來的word會嚇你一跳的哦.O(∩_∩)O哈哈~

在登陸的時候可能會需要驗證碼,如果提示輸入驗證碼的話在程序的文件夾下面就可以看到驗證碼的圖片,照著輸入就ok了.

  1. # -*- coding: utf-8 -*- 
  2. #登陸知乎抓取個人收藏 然后保存為word 
  3. import sys 
  4. reload(sys)  
  5. sys.setdefaultencoding('utf-8'
  6. import urllib 
  7. import urllib2 
  8. import cookielib 
  9. import string 
  10. import re 
  11. from bs4 import BeautifulSoup 
  12. from docx import Document 
  13. from docx import * 
  14. from docx.shared import Inches 
  15. from sys import exit 
  16. import os 
  17.    
  18. #這兒是因為在公司上網(wǎng)的話需要使用socket代理 
  19. #import socks 
  20. #import socket 
  21. #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1",8088) 
  22. #socket.socket =socks.socksocket 
  23.    
  24. loginurl='http://www.zhihu.com/login' 
  25.    
  26. headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36',}  
  27.    
  28. postdata={ 
  29.  '_xsrf''acab9d276ea217226d9cc94a84a231f7'
  30.  'email'''
  31.  'password'''
  32.  'rememberme':'y'  
  33.    
  34. if not os.path.exists('myimg'): 
  35.   os.mkdir('myimg'
  36. if os.path.exists('123.docx'): 
  37.   os.remove('123.docx'
  38. if os.path.exists('checkcode.gif'): 
  39.   os.remove('checkcode.gif'
  40.    
  41. mydoc=Document() 
  42. questiontitle='' 
  43. #---------------------------------------------------------------------- 
  44. def dealimg(imgcontent): 
  45.   soup=BeautifulSoup(imgcontent) 
  46.   try
  47.     for imglink in soup.findAll('img'): 
  48.       if imglink is not None : 
  49.         myimg= imglink.get('src'
  50.         #print myimg 
  51.         if myimg.find('http')>=0: 
  52.           imgsrc=urllib2.urlopen(myimg).read() 
  53.           imgnamere=re.compile(r'http\S*/'
  54.           imgname=imgnamere.sub('',myimg) 
  55.           #print imgname 
  56.           with open(u'myimg'+'/'+imgname,'wb') as code: 
  57.             code.write(imgsrc) 
  58.             mydoc.add_picture(u'myimg/'+imgname,width=Inches(1.25)) 
  59.   except: 
  60.     pass 
  61.   strinfo=re.compile(r'<noscript>[\s\S]*</noscript>'
  62.   imgcontent=strinfo.sub('',imgcontent) 
  63.   strinfo=re.compile(r'<img class[\s\S]*</>'
  64.   imgcontent=strinfo.sub('',imgcontent) 
  65.   #show all 
  66.   strinfo=re.compile(r'<a class="toggle-expand[\s\S]*</a>'
  67.   imgcontent=strinfo.sub('',imgcontent) 
  68.    
  69.   strinfo=re.compile(r'<a class=" wrap external"[\s\S]*rel="nofollow noreferrer" target="_blank">'
  70.   imgcontent=strinfo.sub('',imgcontent) 
  71.   imgcontent=imgcontent.replace('<i class="icon-external"></i></a>',''
  72.    
  73.    
  74.   imgcontent=imgcontent.replace('</b>','').replace('</p>','').replace('<p>','').replace('<p>','').replace('<br>',''
  75.   return imgcontent 
  76.      
  77.    
  78.    
  79.    
  80.    
  81. def enterquestionpage(pageurl): 
  82.   html=urllib2.urlopen(pageurl).read() 
  83.   soup=BeautifulSoup(html) 
  84.   questiontitle=soup.title.string 
  85.   mydoc.add_heading(questiontitle,level=3) 
  86.   for div in soup.findAll('div',{'class':'fixed-summary zm-editable-content clearfix'}): 
  87.     #print div 
  88.     conent=str(div).replace('<div class="fixed-summary zm-editable-content clearfix">','').replace('</div>',''
  89.        
  90.     conent=conent.decode('utf-8'
  91.     conent=conent.replace('<br/>','\n'
  92.        
  93.     conent=dealimg(conent) 
  94.     ###這一塊弄得太復雜了 有時間找找看有沒有處理html的模塊 
  95.     conent=conent.replace('<div class="fixed-summary-mask">','').replace('<blockquote>','').replace('<b>','').replace('<strong>','').replace('</strong>','').replace('<em>','').replace('</em>','').replace('</blockquote>',''
  96.     mydoc.add_paragraph(conent,style='BodyText3'
  97.     """file=open('222.txt','a'
  98.     file.write(str(conent)) 
  99.     file.close()""
  100.        
  101.    
  102. def entercollectpage(pageurl): 
  103.   html=urllib2.urlopen(pageurl).read() 
  104.   soup=BeautifulSoup(html) 
  105.   for div in soup.findAll('div',{'class':'zm-item'}): 
  106.     h2content=div.find('h2',{'class':'zm-item-title'}) 
  107.     #print h2content 
  108.     if h2content is not None: 
  109.       link=h2content.find('a'
  110.       mylink=link.get('href'
  111.       quectionlink='http://www.zhihu.com'+mylink 
  112.       enterquestionpage(quectionlink) 
  113.       print quectionlink     
  114.    
  115.    
  116.    
  117. def loginzhihu(): 
  118.   postdatastr=urllib.urlencode(postdata) 
  119.   ''
  120.   cj = cookielib.LWPCookieJar() 
  121.   cookie_support = urllib2.HTTPCookieProcessor(cj) 
  122.   opener = urllib2.build_opener(cookie_support,urllib2.HTTPHandler) 
  123.   urllib2.install_opener(opener) 
  124.   ''
  125.   h = urllib2.urlopen(loginurl) 
  126.   request = urllib2.Request(loginurl,postdatastr,headers) 
  127.   request.get_origin_req_host 
  128.   response = urllib2.urlopen(request) 
  129.   #print response.geturl() 
  130.   text = response.read() 
  131.    
  132.    
  133.   collecturl='http://www.zhihu.com/collections' 
  134.   req=urllib2.urlopen(collecturl) 
  135.   if str(req.geturl())=='http://www.zhihu.com/?next=%2Fcollections'
  136.     print 'login fail!' 
  137.     return 
  138.   txt=req.read() 
  139.    
  140.   soup=BeautifulSoup(txt) 
  141.   count=0 
  142.   divs =soup.findAll('div',{'class':'zm-item'}) 
  143.   if divs is None: 
  144.     print 'login fail!' 
  145.     return 
  146.   print 'login ok!\n' 
  147.   for div in divs: 
  148.        
  149.     link=div.find('a'
  150.     mylink=link.get('href'
  151.     collectlink='http://www.zhihu.com'+mylink 
  152.     entercollectpage(collectlink) 
  153.     print collectlink 
  154.     #這兒是當時做測試用的,值獲取一個收藏 
  155.     #count+=1 
  156.     #if count==1: 
  157.     #  return 
  158.        
  159.    
  160. def getcheckcode(thehtml): 
  161.   soup=BeautifulSoup(thehtml) 
  162.   div=soup.find('div',{'class':'js-captcha captcha-wrap'}) 
  163.   if div is not None: 
  164.     #print div 
  165.     imgsrc=div.find('img'
  166.     imglink=imgsrc.get('src'
  167.     if imglink is not None: 
  168.       imglink='http://www.zhihu.com'+imglink 
  169.    
  170.       imgcontent=urllib2.urlopen(imglink).read() 
  171.       with open('checkcode.gif','wb') as code: 
  172.         code.write(imgcontent) 
  173.       return True 
  174.     else
  175.       return False 
  176.   return False 
  177.    
  178.    
  179. if __name__=='__main__'
  180.      
  181.   import getpass 
  182.   username=raw_input('input username:'
  183.   password=getpass.getpass('Enter password: ')  
  184.      
  185.   postdata['email']=username 
  186.   postdata['password']=password 
  187.   postdatastr=urllib.urlencode(postdata) 
  188.   cj = cookielib.LWPCookieJar() 
  189.   cookie_support = urllib2.HTTPCookieProcessor(cj) 
  190.   opener = urllib2.build_opener(cookie_support,urllib2.HTTPHandler) 
  191.   urllib2.install_opener(opener) 
  192.    
  193.   h = urllib2.urlopen(loginurl) 
  194.   request = urllib2.Request(loginurl,postdatastr,headers) 
  195.   response = urllib2.urlopen(request) 
  196.   txt = response.read() 
  197.    
  198.   if getcheckcode(txt): 
  199.     checkcode=raw_input('input checkcode:'
  200.     postdata['captcha']=checkcode 
  201.     loginzhihu() 
  202.     mydoc.save('123.docx'
  203.   else
  204.     loginzhihu() 
  205.     mydoc.save('123.docx'
  206.    
  207.   print 'the end' 
  208.   raw_input() 

好了,大概就是這樣,大家如果有什么好的建議或者什么的可以再下面留言,我會盡快回復的.或者在小站的關于頁面有我的聯(lián)系方式,直接聯(lián)系我就ok.

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区网站 | 日韩深夜视频 | 国产一区二区三区影视 | 免费一级欧美 | 欧美成人精品一区 | 亚洲一区二区中文 | 在线看国产视频 | 久色一区 | 欧美另类在线视频 | 8x成人在线电影 | 日本在线不卡一区二区 | 黄色7777| 日本精品二区 | 久久福利在线 | 国产免费一区二区三区 | 色综合中文字幕 | 久久国产经典 | 欧美日韩影视 | 成人午夜免费在线视频 | 九色在线78m| 久久精品久久精品久久精品 | 学霸趴下被打肿光屁股小说 | 九九视频精品在线观看 | 亚洲一级簧片 | 9797色 | av性色全交蜜桃成熟时 | av黄色片网站 | 一级黄色免费观看视频 | 欧洲精品久久久久69精品 | 日韩中字幕 | 毛片韩国 | 免费毛片免费看 | 黄网站色成年大片免费高 | 欧美日韩爱爱视频 | 在线成人看片 | 精国品产一区二区三区有限公司 | 女人叉开腿让男人桶 | 精品人伦一区二区三区蜜桃网站 | av电影院在线观看 | 亚洲看片网 | 国产在线精品一区二区 |