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

最新跟新:由于叔叔不约规则修改,图片接口在很短时间就无法访问。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就不会为空,则将图片保存下来。要测试的小伙伴们可以试试:1342894147847

        接下来,我又连续发了多张测试图片。发现12位数字并没有什么规律可言。最后右键保存网页,看了一波前端代码,有这么一段:

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

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

def suiji():
    seed = "1234567890"
    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 = "1234567890"
    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()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
好的,我知道你想问关于创建Spring Boot项目的问题。以下是一个基于Idea的Vue+Spring Boot项目创建的详细步骤: 1. 打开Idea,选择“Create New Project”创建一个新项目。 2. 在弹出的“New Project”窗口中,选择“Spring Initializr”项目类型,点击“Next”按钮。 3. 在接下来的窗口中,选择你的项目语言和Spring Boot版本,然后点击“Next”按钮。 4. 进入“Project Metadata”页面,填写项目的基本信息。 5. 在“Dependencies”页面中,选择你需要的依赖项,如Web、JPA、MyBatis等,然后点击“Next”按钮。 6. 设置项目名称和文件路径,然后点击“Finish”按钮,等待项目创建完成。 现在你已经创建了一个空的Spring Boot项目。接下来,我们需要添加Vue前端框架。 7. 打开终端,进入项目文件夹,执行以下命令: ``` npm init ``` 8. 执行以下命令安装Vue框架和相关依赖: ``` npm install vue --save npm install vue-router --save npm install vuex --save npm install axios --save ``` 9. 创建一个新的Vue组件,例如“App.vue”,并添加以下代码: ```vue <template> <div> <router-view></router-view> </div> </template> <script> export default { name: "App", }; </script> <style> </style> ``` 10. 创建一个新的Vue路由模块,“router.js”,并添加以下代码: ```javascript import Vue from "vue"; import Router from "vue-router"; Vue.use(Router); const router = new Router({ mode: "history", routes: [ { path: "/", name: "home", component: Home, }, ], }); export default router; ``` 11. 添加以下代码到“main.js”中,初始化Vue并设置路由: ```javascript import Vue from "vue"; import App from "./App.vue"; import router from "./router"; Vue.config.productionTip = false; new Vue({ router, render: (h) => h(App), }).$mount("#app"); ``` 12. 创建一个新的Vue组件,“Home.vue”,并添加以下代码: ```vue <template> <div> <h1>Welcome to Vue + Spring Boot!</h1> </div> </template> <script> export default { name: "Home", }; </script> <style> </style> ``` 现在你已经成功添加了Vue框架,并创建了一个简单的Vue组件和路由。你可以运行Spring Boot应用程序并打开浏览器访问“http://localhost:8080”查看结果。 希望这些步骤可以帮助你创建一个基于Idea的Vue+Spring Boot项目。如果你有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值