python 前置,后置正则例子

本文将实现从CSDN博客获取内容发布至百度博客,分别实践抓取博客内容、模拟登录、表单提交。在下文代码中间逐一阐述。

 

Python代码 
  1. # -*- coding: utf-8 -*-  
  2. import re  
  3. import urllib  
  4. import urllib2  
  5. import cookielib  
  6.   
  7. #获取CSDN博客标题和正文  
  8. url = "http://blog.csdn.net/[username]/archive/2010/07/05/5712850.aspx"  
  9. sock = urllib.urlopen(url)  
  10. html = sock.read()  
  11. sock.close()  
  12. content = re.findall('(?<=blogstory">).*(?=<p class="right artical)', html, re.S)  
  13. content = re.findall('<script.*>.*</script>(.*)', content[0], re.S)  
  14. title = re.findall('(?<=<title>)(.*)-.* - CSDN.*(?=</title>)', html, re.S)  
  15. #根据上文获取内容新建表单值  
  16. blog = {'spBlogTitle': title[0].decode('utf-8').encode('gbk'), #百度博客标题  
  17.         'spBlogText': content[0].decode('utf-8').encode('gbk'),#百度博客内容  
  18.         'ct'"1",  
  19.         'cm'"1"}  
  20. del content  
  21. del title  
  22.   
  23. #模拟登录  
  24. cj = cookielib.CookieJar()  
  25. #用户名和密码  
  26. post_data = urllib.urlencode({'username''[username]''password''[password]''pwd''1'})  
  27. #登录路径  
  28. path = 'https://passport.baidu.com/?login'  
  29. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  
  30. opener.addheaders = [('User-agent''Opera/9.23')]  
  31. urllib2.install_opener(opener)  
  32. req = urllib2.Request(path, post_data)  
  33. conn = urllib2.urlopen(req)  
  34.   
  35. #获取百度发布博客的认证令牌  
  36. bd = urllib2.urlopen(urllib2.Request('http://hi.baidu.com/[username]/creat/blog')).read()  
  37. bd = re.findall('(?<=bdstoken\" value=\").*(?=ct)', bd, re.S)  
  38. blog['bdstoken'] = bd[0][:32]  
  39. #设置分类名  
  40. blog['spBlogCatName'] = 'php'  
  41. #比较表单发布博客  
  42. req2 = urllib2.Request('http://hi.baidu.com/[username]/commit', urllib.urlencode(blog))  
  43.   
  44. #查看表单提交后返回内容  
  45. print urllib2.urlopen(req2).read()  
  46.   
  47. #请将[username]/[password]替换为您的真实用户名和密码  
  48. #搞定收工……  
 
评论

原文地址:https://www.cnblogs.com/lexus/p/1851644.html