叔叔不约---匿名聊天网 聊天图片爬虫抓取

叔叔不约---匿名聊天网 聊天图片爬虫抓取最新跟新 由于叔叔不约规则修改 图片接口在很短时间就无法访问 404 结果 本文章介绍的爬虫失效 在一天无聊刷贴吧的时候 偶然发现了一个叫做叔叔不约的匿名聊天网站 好奇的搜索并进入 发现该网站并不需要注册便可以随机匹配聊天对象 开始我以为聊天对象均为 AI 然后测试了一波

大家好,我是讯享网,很高兴认识大家。

最新跟新:由于叔叔不约规则修改,图片接口在很短时间就无法访问。404结果,本文章介绍的爬虫失效        

        在一天无聊刷贴吧的时候,偶然发现了一个叫做叔叔不约的匿名聊天网站,好奇的搜索并进入,发现该网站并不需要注册便可以随机匹配聊天对象。开始我以为聊天对象均为AI,然后测试了一波,发现可能并不是AI。经过多次测试,不同的人有不同的说话方式,不像AI作风。

    后来我发现这个网站居然可以发图片,而且图片的地址是可以获取到的,双击点击图片便跳转到了http://7xpsm9.com1.z0.glb.clouddn.com/f十二位数字?imageslim的网址上。菜鸡的我本着测试的原则,写了个爬虫来尝试直接获取自己刚才发送的图片,python代码如下:

def pachong(num): try: url = "http://7xpsm9.com1.z0.glb.clouddn.com/f" + num + "?imageslim" response = requests.get(url) image = Image.open(BytesIO(response.content)) if(image!=None): #image.save('Z:/img/'+num+'.jpg') #windows image.save('/home/img/'+num+'.jpg') #linux except IOError: print "Error: fail" else: print "yes!!!yes!!!yesss" 
讯享网

        num传递的就是自己发送图片的数字,代码大概的意思就是用get请求的方式去向服务器索要图片,如果得到了图片那么image就不会为空,则将图片保存下来。要测试的小伙伴们可以试试:47

讯享网var n = "f" + Math.round((new Date).getTime() * Math.random());
        所以图片的地址是大概由用时间戳*随机数得到的一组随机数

         于是本着更无聊的玩法,我继续写了个随机函数,随机出12位数字,给让爬虫函数不停的向服务器获取图片。  

def suiji(): seed = "" sa = [] for i in range(12): sa.append(random.choice(seed)) salt = ''.join(sa) print salt return salt

        结果可想而知,在服务器上爬虫跑了24小时,一张图片也没有获取到。我又测试了java运行相同功能,对比了运行100次python和java的速度,java大概比python快了10% 左右。java代码如下:

讯享网import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.security.AllPermission; import java.util.Random; public class pachong { public static void main(String[] args) throws Exception { all(); } public static void all() throws Exception { int i=0; while (true) { i++; pachong(createData(12)); System.out.println(i); } } //根据指定长度生成纯数字的随机数 public static String createData(int length) { StringBuilder sb=new StringBuilder(); Random rand=new Random(); for(int i=0;i<length;i++) { sb.append(rand.nextInt(10)); } String data=sb.toString(); System.out.println(data); return data; } public static void pachong(String num) throws Exception { //new一个URL对象 URL url = new URL("http://7xpsm9.com1.z0.glb.clouddn.com/f"+num+"?imageslim"); //打开链接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求方式为"GET" conn.setRequestMethod("GET"); //超时响应时间为5秒 conn.setConnectTimeout(5 * 1000); //通过输入流获取图片数据 try { InputStream inStream = conn.getInputStream(); if(inStream!=null) { //得到图片的二进制数据,以二进制封装得到数据,具有通用性 byte[] data = readInputStream(inStream); //new一个文件对象用来保存图片,默认保存当前工程根目录 File imageFile = new File(num+".jpg"); //创建输出流 FileOutputStream outStream = new FileOutputStream(imageFile); //写入数据 outStream.write(data); //关闭输出流 outStream.close(); } } catch (Exception e) { System.out.println("没图"); } } public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); //创建一个Buffer字符串 byte[] buffer = new byte[1024]; //每次读取的字符串长度,如果为-1,代表全部读取完毕 int len = 0; //使用一个输入流从buffer里把数据读取出来 while( (len=inStream.read(buffer)) != -1 ){ //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 outStream.write(buffer, 0, len); } //关闭输入流 inStream.close(); //把outStream里的数据写入内存 return outStream.toByteArray(); } } 

        java和python都没有把带宽吃完,这是不能忍的,本着一条路走到底的原则,继续使用python来爬。服务器使用centos7+ 系统,其中华为云的centos7.3死活装不进去PIL,换centos7.2后安装正常。后台运行python并且保留输出结果的命令为nohup python 文件名.py &  输出会保留在nohup.out文件中,带宽吃不满没关系,在不同的路径下多运行几个爬虫就行了。使用 top 命令可以看服务器资源占用情况。如果用的是阿里云或者腾讯云可以在网页的控制台查看带宽占用,但是华为没有,那就自己装一个,安装使用如 http://www.osyunwei.com/archives/1211.html 所示。

         在本人的测试中,发现1和7开头的12位数字居多,于是采用每次加一的方式去爬图片,得到图片的速度明显比之前的随缘算法来的快。其实也就一天几张图,对叔叔不约储存图片的七牛云这样规模连续的访问并没有遭到限速之类的限制,依然能够顺利的得到图片,但是每个服务器每天的流量是却都有几个G,活脱脱像流量攻击。

         12位随机数的接口对于一般人的加密来说是足够,但是对于图片一直在增加的匿名聊天网站可能是完全不够的。我无法获取某一个人聊天的图片,但是能随机获取。在得到的图片中有很多少儿不宜的图片


# -*- coding: utf-8 -*- import requests from PIL import Image from io import BytesIO import random def pachong(num): try: url = "http://7xpsm9.com1.z0.glb.clouddn.com/f" + num + "?imageslim" response = requests.get(url) image = Image.open(BytesIO(response.content)) #print image if(image!=None): #image.save('Z:/img/'+num+'.jpg') #windows image.save('/home/img/'+num+'.jpg') #linux except IOError: print "Error: fail" else: print "yes!!!yes!!!yesss" def suiji(): seed = "" sa = [] for i in range(12): sa.append(random.choice(seed)) salt = ''.join(sa) print salt return salt def all(): i=0 while(i<10): pachong(suiji()) if __name__ == "__main__": all()

小讯
上一篇 2025-02-27 14:34
下一篇 2025-01-07 21:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14994.html