百度贴吧查人的python代码
先说明一下,本代码主要用于编程学习,不要用于非法获取私人数据和进行人肉搜索,使用请尊重他人隐私

这是一段python代码,纯属训练所写,大侠莫喷。

其实我们在百度贴吧经常想要获取某个人的发帖纪录,不过如果对方设置了隐私的话,就会是这样:pic

来自 科创茶话
2015-5-30 16:14:46
smith(作者)
1楼
但其实我们还是可以获取到别人的信息的[s::lol],秘密就在最上方的高级搜索。
不过靠人手工去一个个获取也太麻烦了,我们来个高级一点的,写一段代码去获取。
工具就是python脚本,python的urllib很好用,个人认为python是一个强大的黑阔语言,必须要去学习的。
好了废话少说,下面介绍思路
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
2楼
向这个url提交GET请求,就可以获得搜索的网页:


http://tieba.baidu.com/f/search/ures?ie=utf-8&kw=&qw=&rn=30&un=xxx&pn=1



其中un=xxx 就是你要搜索用户ID,pn就是page id,[s::lol],接下来我们只要用正则表达式去搜索我们感兴趣的链接就行了
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
3楼
先实现一个获取总共有多少条发帖纪录的函数get_record_size,再实现一个获取每一页有多少帖子链接的函数get_urls_in_apage
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
4楼
好了不多废话了,代码很少,直接贴出来!附件是完整代码
tiebasearch.zip1.02e+3b5次

#!/usr/bin/env python

import re
import os
import sys
import time
import random
import urllib


def get_urls_in_apage(page):
   out = re.findall(r'href\=\"\/p\/[^\s]*',page)
   for i in out:
      #print i
      t = "http://tieba.baidu.com" + i[6:len(i)-1]
      print t
      cid = re.findall(r'\#[^\s]*',t)
      ids = cid[0][1:]
      #print ids

  

def get_record_size(tname):
   urls = "http://tieba.baidu.com/f/search/ures?ie=utf-8&kw=&qw=&rn=30&un="
   req = urllib.urlopen(urlstr + tname)
   web = req.read()
   totalsizestr = re.findall(r's\_nav\_right hasPage[^\s]*',web)
   totalsize = re.findall(r'[0-9][0-9]{0,}',totalsizestr[0])
   sizex = int(totalsize[0])
   return sizex

if __name__ == '__main__':
   urlstr = "http://tieba.baidu.com/f/search/ures?ie=utf-8&kw=&qw=&rn=30&un="
   if(len(sys.argv)==3 and sys.argv[1] == '-k' ):
       namex = sys.argv[2]
       sizex = get_record_size(namex)
       print "find all record size = " + str(sizex)
       rn = 30
       pn = sizex / rn
       print pn
       i = 1
       while i < pn:
          newurl = urlstr + namex +"&" + "pn=" + str(i)
          print newurl
          reqx = urllib.urlopen(newurl)
          web2 = reqx.read()
          get_urls_in_apage(web2)
          i = i + 1
          if i > 76:
             break
          print str(i)
          time.sleep(1)
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
5楼
使用方法:
1.安装python2.7的版本
2.打开cmd控制条或者linux控制条,cd 到代码的路径
3.执行python tiebasearch.py -k xxx> xxx.txt
这样就会把xxx这个百度贴吧ID的发帖纪录打到文件里面
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
6楼
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
7楼
下一步计划:
1.支持爬取发帖内容
2.支持新浪微博
3.支持腾讯微博
。。。。。。。
折叠评论
加载评论中,请稍候...
折叠评论
8楼
python2.7至今还支持win2000。。。
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
9楼
引用 acmilan:
python2.7至今还支持win2000。。。
3.x不太好用
折叠评论
加载评论中,请稍候...
折叠评论
10楼
smith怎么崩溃了。。。
pic
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
11楼
引用 acmilan:
smith怎么崩溃了。。。
额,估计正则没写好,网页的内容太多没抓到内容。
多试几次试试
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
12楼
引用 smith:
额,估计正则没写好,网页的内容太多没抓到内容。
多试几次试试
另外,我的百度ID怎么会是smith呢[s::lol]
折叠评论
加载评论中,请稍候...
折叠评论
13楼
引用 smith:
另外,我的百度ID怎么会是smith呢
实际上smith这个百度ID并没有发什么贴。。。[s:20]看他的动态只有两贴,然而搜不出来
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
14楼
引用 acmilan:
实际上smith这个百度ID并没有发什么贴。。。看他的动态只有两贴,然而搜不出来
其实对付人肉的方法很简单,要么不发帖,要么不断水贴,发些错误的地址,电话、QQ、邮箱等信息。
折叠评论
加载评论中,请稍候...
折叠评论
15楼
引用 smith:
另外,我的百度ID怎么会是smith呢
  totalsize = re.findall(r'[0-9][0-9]{0,}',totalsizestr[0])
这一行你没有处理搜不到的情况,这时索引[0]并不存在。
折叠评论
加载评论中,请稍候...
折叠评论
smith(作者)
16楼
thank you,我处理一下
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png