正所谓得屌丝着得天下,贴吧就是屌丝们聚集的地方,有时候会看到楼主发一个福利帖子,然后下面留下几页的邮箱。这么多邮箱,收集起来就可以做一些邪恶的事情
我的思路:(我没有用多线程,如果你想大量收集的话,可以采用多线程)
1.获取首页的50个帖子的地址
2.进入每个帖子,获取帖子的页数
3.如果这个帖子第一页没有邮箱,就爬下一个帖子,免得浪费资源
4.我只是把邮箱打印出了,需要的话自己可以写进函数,存到自己的硬盘上
import urllib
import re
import threading
#获得网页源码
def getHtml(url):
html=urllib.urlopen(url).read()
return html
#html是网页源码,regx是正则表达式
def getRegx(html,regx):
reg=repile(regx)
result=re.findall(reg,html)
return result
def getMail(website):
for i in range(10):
ipn=i*50
url=website+'&pn=%d' % ipn
#print '----第%d页-----' % i
#获得每个帖子的网址
xurllist=getRegx(getHtml(url),url_regx)
for i in range(len(xurllist)):
xurl='http://tieba.baidu'+xurllist[i]
#获得页数
pn=getRegx(getHtml(xurl),pn_regx)
print '----------------------------'
print '第%d个帖子,共有%d页' % (i,int(pn[0]))
for j in range(1,int(pn[0])):
#获得邮箱
pnurl=xurl+'?pn=%d' % j
#print pnurl
maillist=getRegx(getHtml(pnurl),mail_regx)
#print '-----------------'
print '--第%d页:' % j
print '--网址:'+pnurl
print '--邮箱个数:'+str(len(maillist))
#如果第一页每一邮箱就退出
if len(maillist)==0:
break
else:
for mail in maillist:
print mail
if __name__=='__main__':
#获取页数的正则
pn_regx=r'<span class="red">(.*?)<'
#获取qq邮箱的正则
mail_regx=r'(\d{9,10}@qq\)'
#获得每个帖子的正则
url_regx=r'<div class="threadlist_text threadlist_title j_th_tit notStarList "><a href="(.*?)"'
url=raw_input('the website:')
getMail(url)
结果:
注意:
1.我获取的只有qq邮箱,我觉得qq邮箱的价值可能要高点
2.好像查看贴吧第二页的帖子需要登录,python模拟登录百度的源码,网上很多
更多推荐
用python获取贴吧中留下的邮箱
发布评论