gpt4 book ai didi

python实现登陆知乎获得个人收藏并保存为word文件

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现登陆知乎获得个人收藏并保存为word文件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

这个程序其实很早之前就完成了,一直没有发出了,趁着最近不是很忙就分享给大家. 。

使用BeautifulSoup模块和urllib2模块实现,然后保存成word是使用python docx模块的,安装方式网上一搜一大堆,我就不再赘述了. 。

主要实现的功能是登陆知乎,然后将个人收藏的问题和答案获取到之后保存为word文档,以便没有网络的时候可以查阅.当然,答案中如果有图片的话也是可以获取到的.不过这块还是有点问题的.等以后有时间了在修改修改吧. 。

还有就是正则,用的简直不要太烂…鄙视下自己… 。

还有,现在是问题的话所有的答案都会保存下来的.看看有时间修改成只保存第一个答案或者收藏页问题的答案吧.要不然如果收藏的太多了的话保存下来的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. #这儿是因为在公司上网的话需要使用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() 

好了,大概就是这样,大家如果有什么好的建议或者什么的可以再下面留言,我会尽快回复的.或者在小站的关于页面有我的联系方式,直接联系我就ok. 。

最后此篇关于python实现登陆知乎获得个人收藏并保存为word文件的文章就讲到这里了,如果你想了解更多关于python实现登陆知乎获得个人收藏并保存为word文件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com