梦殇国际

标题: Python获取所有我喜欢的贴吧名字+等级+经验值 [打印本页]

作者: 阿星    时间: 2016-5-9 21:49
标题: Python获取所有我喜欢的贴吧名字+等级+经验值
python贴吧登陆+获取我喜欢的贴吧名字、贴吧的fid、贴吧等级、贴吧经验值、贴吧链接
执行结果:

代码:
  1. # coding:utf-8
  2. '''
  3. Created on 2016年5月2日

  4. @author: hisenyuan
  5. '''
  6. from bs4 import BeautifulSoup
  7. import urllib2
  8. import urllib
  9. import cookielib
  10. import re
  11. import json
  12. from pip._vendor import requests

  13. URL_BAIDU_INDEX = u'http://www.baidu.com/';
  14. # https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true 也可以用这个
  15. URL_BAIDU_TOKEN = 'https://passport.baidu.com/v2/api/?getapi&tpl=pp&apiver=v3&class=login';
  16. URL_BAIDU_LOGIN = 'https://passport.baidu.com/v2/api/?login';

  17. # 设置用户名、密码
  18. username = '梦殇国际';  #
  19. password = 'www.714.hk';  #

  20. # 设置cookie,这里cookiejar可自动管理,无需手动指定
  21. cj = cookielib.CookieJar();
  22. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
  23. urllib2.install_opener(opener);
  24. reqReturn = urllib2.urlopen(URL_BAIDU_INDEX);

  25. # 获取token,
  26. tokenReturn = urllib2.urlopen(URL_BAIDU_TOKEN);
  27. matchVal = re.search(u'"token" : "(?P<tokenVal>.*?)"', tokenReturn.read());
  28. tokenVal = matchVal.group('tokenVal');


  29. # 构造登录请求参数,该请求数据是通过抓包获得,对应https://passport.baidu.com/v2/api/?login请求
  30. postData = {
  31. 'username' : username,
  32. 'password' : password,
  33. 'u' : 'https://passport.baidu.com/',
  34. 'tpl' : 'pp',
  35. 'token' : tokenVal,
  36. 'staticpage' : 'https://passport.baidu.com/static/passpc-account/html/v3Jump.html',
  37. 'isPhone' : 'false',
  38. 'charset' : 'UTF-8',
  39. 'callback' : 'parent.bd__pcbs__ra48vi'
  40. };
  41. postData = urllib.urlencode(postData);


  42. # 发送登录请求
  43. loginRequest = urllib2.Request(URL_BAIDU_LOGIN, postData);
  44. loginRequest.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
  45. loginRequest.add_header('Accept-Encoding', 'gzip,deflate,sdch');
  46. loginRequest.add_header('Accept-Language', 'zh-CN,zh;q=0.8');
  47. loginRequest.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36');
  48. loginRequest.add_header('Content-Type', 'application/x-www-form-urlencoded');
  49. sendPost = urllib2.urlopen(loginRequest);


  50. # 查看贴吧个人主页 ,测试是否登陆成功,由于cookie自动管理,这里处理起来方便很多
  51. # http://tieba.baidu.com/home/main?un=XXXX&fr=index 这个是贴吧个人主页,各项信息都可以在此找到链接

  52. # 获取我喜欢的贴吧页数,一页20个
  53. def getnum():
  54.     url_forum = 'http://tieba.baidu.com/i/68449687/forum'
  55.     r2 = requests.get(url_forum)
  56.     search = re.findall(ur'forum_name":"(.+?)"', r2.text)
  57.     num_forum = len(search)
  58.     if num_forum % 20 != 0:
  59.         num_forum = num_forum / 20 + 1
  60.     return num_forum




  61. #获取我喜欢的贴吧信息
  62. def getinfo(num):
  63.     start = 1;
  64.     print '吧名\t\t贴吧fid\t\t等级\t\t经验\t贴吧链接';
  65.     while(start <= num):
  66.         teibaUrl = 'http://tieba.baidu.com/f/like/mylike?&pn=' + str(start);
  67.         start = start + 1;
  68.         content = urllib2.urlopen(teibaUrl).read();
  69.         content = content.decode('gbk').encode('utf8');
  70.         # 打印个人贴吧网页内容
  71.         # print content;
  72.         
  73.         # 解析数据,用的BeautifulSoup4,感觉没有jsoup用的爽
  74.         soup = BeautifulSoup(content, 'html.parser');
  75.         list = soup.findAll('tr');
  76.         list = list[1:len(list)];
  77.         # careTeibalist = [];
  78.         for elem in list:
  79.             soup1 = BeautifulSoup(str(elem), 'html.parser');
  80.             # 获取fid的前缀网址,等号后面跟贴吧名字的URL编码
  81.             url1 = 'http://tieba.baidu.com/f/commit/share/fnameShareApi?ie=utf-8&fname=';
  82.             # /f?kw=%D3%A2%D0%DB%C1%AA%C3%CB 截取后面的%D3%A2%D0%DB%C1%AA%C3%CB
  83.             name = soup1.find('a')['href'].split('=')[1];
  84.             # 解析json
  85.             fidconnect = urllib2.urlopen(url1 + name).readline();
  86.             fid = json.loads(fidconnect)['data']['fid'];
  87.             print soup1.find('a')['title'] + '\t\t' + '%d' % fid + '\t\t' + soup1.find('a', {'class', 'like_badge'})['title'] + '\t\t' + soup1.find('a', {'class', 'cur_exp'}).get_text() + '\t' + 'http://tieba.baidu.com' + soup1.find('a')['href'];

  88. #获取页数
  89. num = getnum();
  90. #获取信息
  91. getinfo(num)
复制代码


把里面的帐号密码设置成你自己的即可
python2即可运行
有兴趣的可以试一试,或者网上去搜索一下
很多源码可以参考,自己做点小工具什么的还是可以




作者: twas556    时间: 2016-5-9 23:00
谢谢分享

作者: leeds    时间: 2016-5-10 03:10
不会编程,谁做个现成的吧

作者: 阿星    时间: 2016-5-10 07:52
leeds 发表于 2016-5-10 03:10
不会编程,谁做个现成的吧

这就是现成的

作者: alice10501    时间: 2016-5-10 10:21
我就喜欢帅哥

作者: newxunyu    时间: 2016-5-10 10:26
这个不懂怎么用

作者: 百度度娘    时间: 2016-5-10 11:03
什么~

作者: 青争青争    时间: 2016-5-10 11:26
嗦嘎

作者: aaaa3738    时间: 2016-7-20 16:00
高大上的样子

作者: vsuperfly    时间: 2016-7-20 17:09
不错不错哈

作者: ynnu_133    时间: 2016-7-21 06:25

先回复再看看

作者: bollt520    时间: 2016-7-21 09:33
666观望





欢迎光临 梦殇国际 (https://714.hk/) Powered by Discuz! X3.4