澳洲幸运8:Crawler(二)在QQ空间中实现自动评论和自动点赞

2021-03-20 22:55:59 浏览: 107次 来源:【jake】 作者:-=Jake=-

仅抓取网页是不够的。通常,我经常在该空间中遇到类似第二或第二分钟的评论。现在,您还可以使用搜寻器在QQ空间中获取所需的信息,然后将http请求发送到特定的URL。您可以进行自动评论和顶。使用的cookie登录似乎有点低。我尝试使用帐户密码登录,但失败。然后就把它留下来,以后再研究吧

1. 1首先使用cookie登录QQ空间qq空间自动留言,获取页面内容,在PC上打开自己的QQ空间,然后按F12进入开发人员模式,您可以看到您的cookie,然后复制此内容。

然后使用cookie登录并获取您自己的QQ空间的内容

$qq = "这里写自己的qq";
$cookie = "这里复制cookie";
$ch = curl_init();
$url = "https://user.qzone.qq.com/".$qq;
//设置访问的URL
curl_setopt($ch, CURLOPT_URL, $url);
//设置http头
$http_header = array(
    	"User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0",
    	"Accepted-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    	"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    	"Cookie: $cookie" );
//设置HTTP报文头的用户信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
//不需要响应报文头
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//跳过https验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    
//返回响应信息而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if (!$output = curl_exec($ch)) {
    echo "Curl Error:". curl_error($ch);
}
curl_close($ch);

您获得的$ output是您获得的QQ空间页面。

2. 2然后查看要求提供类似内容的网址,找到喜欢的人,我找到了它

我发现url前面的段落很容易理解。以下参数和g_tk,什么是qzonetoken?百度检查之后,我了解到gtk是通过基于cookie中p_skey的值的算法获得的,并且每次登录时都会获得qzonetoken。要获取值,请在QQ空间的网页上按F12,打开Web页面元素界面,然后按ctrl + F进入qzonetoken,搜索qzonetoken,您可以看到突出显示的部分

然后使用常规匹配将其匹配。

if ($output){
preg_match('/window\.g_qzonetoken = \(function\(\)\{ try\{return "(.*?)";\} catch\(e\)/',$output, $matches2);
    $qzonetoken = $matches2[1];
}

qzonetoken在那,让我们看看如何获​​得g_tk。由于它是根据Cookie中p_skey的值获得的,因此请首先匹配p_skey。

 preg_match('/p_skey=([^;^\']*)/', $http_header[3], $matches);
    $p_skey = $matches[1];

像百度的算法

将其另存为gtk.php,放置在同一目录中,然后获取g_tk的值以将其集成到

require('gtk.php');
preg_match('/p_skey=([^;^\']*)/', $http_header[3], $matches);
$p_skey = $matches[1];    
$gtk = getGTK($p_skey);

1. 3好的。既然url的参数都可以了凤凰体育 ,那么只需构建一个数据包并将其发送过来即可。就像在qq中一样,看看开发人员中心需要什么数据包

qzreferrer段落实际上足以转到qq号码,

Opuin是自己的QQ,分别是unikey和curkey,然后在网页上查找unikeyqq空间自动留言

我发现,每次谈话后都有一个自己的独角兽和弯头。这是用来识别谈话的,

然后,当qzonetoken匹配时,您需要匹配unikey。

if ($output){
    //这里匹配出qzonetoken
    preg_match('/window\.g_qzonetoken = \(function\(\)\{ try\{return "(.*?)";\} catch\(e\)/',$output, $matches2);
    $qzonetoken = $matches2[1];
    //正则匹配出unikey和curkey,unikey是$key[1][n],,unikey就是与qq好友相关的说说信息
    $regex1 = '/data-unikey="(http[^"]*)"[^d]*data-curkey="([^"]*)"[^d]*data-clicklog=("like")[^h]*href="javascript:;"/';
	//得到的$key就是我们想要的
    preg_match_all($regex1, $output, $key);
}

1. 4然后构建一个数据包亚博app安全有保障 ,以便像HTTP请求一样发送

//构建点赞所需的数据包
    for($i = 0; $i < count($key); $i++){
    	//时间为时间戳格式
    	$time = time();
    	$fid  = explode('/', $key[1][$i]);
    	//数据包
    	$data = array(
		"qzreferrer"	        =>	"https://user.qzone.qq.com/".$qq,
		"opuin"			=>	$qq,
		"unikey"		=>	$key[1][$i],
		"curkey"		=>	$key[2][$i],
		"from"			=>	"1",
		"appid"			=>	"311",
		"typeid"		=>	"0",
		"abstime"		=>	$time,
		"fid"		    =>	$fid[5],
		"active"		=>	"0",
		"fupdate"		=>	"1"
		);
       
    //使用curl发送数据包
	$ch2 = curl_init();
	//点赞请求的url
	$url2 = "https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=".$gtk.'&qzonetoken=.'$qzonetoken;
    curl_setopt($ch2, CURLOPT_URL, $url2);
	//请求HTTP报文头
	curl_setopt($ch2, CURLOPT_HTTPHEADER, $http_header);
	//不需要响应报文头
	curl_setopt($ch2, CURLOPT_HEADER, FALSE);
	//跳过https验证
	curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, FALSE); 
	curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, FALSE); 
	//返回响应信息而不是直接输出
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, TRUE);
	//设置post信息
	curl_setopt($ch2, CURLOPT_POST, TRUE);
	//改善数据格式
	curl_setopt($ch2, CURLOPT_POSTFIELDS, http_build_query($data));
	//开始执行
	if($output2 = curl_exec($ch2)){
		echo "点赞成功
"; } else{ echo curl_error($ch2); } curl_close($ch2); }

在最后添加1. 5,以实现每3秒自动刷新一次,在服务器上输入此文件后,您可以自动喜欢新的通话。

echo "系统当前时间戳为:".time();
//
echo "";

2. 1现在鸭脖app官网 ,实现了自动点赞功能,其次是自动注释功能。本质是一样的。从页面中获取所需的参数信息,然后构造一个数据包并将其发送到特定的url很好,请看url

已经获得了两个必需的参数

2. 2看一下数据包所需的数据

只有这两个页面需要定期匹配

所以匹配时只需匹配qzonetoken和unikey

集成如下

if ($output) {
    	//得到qzonetoken
    	preg_match('/window\.g_qzonetoken = \(function\(\)\{ try\{return "(.*?)";\} catch\(e\)/',$output, $matches2);
    	$qzonetoken = $matches2[1];
    //正则匹配出unikey和curkey,unikey是$key[1][n],,unikey就是与qq好友相关的说说信息
	$regex1 = '/data-unikey="(http[^"]*)"[^d]*data-curkey="([^"]*)"[^d]*data-clicklog=("like")[^h]*href="javascript:;"/';
	//得到的$unikey就是我们想要的
	preg_match_all($regex1, $output, $key);
	//匹配出需要的topicid以及qq号,得到的qq号是$matches[1][$i],topicid是$matches[1][$i].'_'.$matches[2][$i]
	preg_match_all('/data-topicid="(\w+)_(\w+__\w+)"/',$output, $comment_matches);
			
    }

2. 3构造注释所需的数据包并将其发送

for($i = 0; $i < count($comment_matches[1]); $i++){
    	$time = time();
    	$data_comment = array(
    		'topicId' => $comment_matches[1][$i].'_'.$comment_matches[2][$i],
			'feedsType' => 100,  //这是说说的类型,是普通文字说说和配图说说
			'inCharset' => 'utf-8',
			'outCharset' => 'utf-8',
			'plat' => 'qzone',
			'source' => 'ic',
			'hostUin' => $comment_matches[1][$i],
			'isSignIn' => '',
			'platformid' => 52,
			'uin' => $qq,
			'format' => 'fs',
			'ref' => 'feeds',
			'content' => $comment, //这里的comment就是自动评论的内容,要自己设定
			'richval' => '',
			'richtype' => '',
			'private' => 0,
			'paramstr' => 1,
			'qzreferrer' => 'https://user.qzone.qq.com/'.$qq.'/infocenter',
		);
		
	
		//使用curl发送数据包
	    $ch3 = curl_init();
	    //点赞的url格式
		$url3 = "https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_re_feeds?qzonetoken=".$qzonetoken."&g_tk="$gtk;
		//echo $url2;
		curl_setopt($ch3, CURLOPT_URL, $url3);
	    //设置测试用的HTTP报文头的用户信息
	    curl_setopt($ch3, CURLOPT_HTTPHEADER, $http_header);
	    //不需要报文头
	    curl_setopt($ch3, CURLOPT_HEADER, FALSE);
	    //跳过https验证
	    curl_setopt($ch3, CURLOPT_SSL_VERIFYPEER, FALSE); 
		curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, FALSE); 
		//返回响应信息而不是直接输出
    	curl_setopt($ch3, CURLOPT_RETURNTRANSFER, TRUE);
		//设置post信息
		curl_setopt($ch3, CURLOPT_POST, TRUE);
		//数据包格式
		curl_setopt($ch3, CURLOPT_POSTFIELDS, http_build_query($data_comment));
		//开始执行
		if($output3 = curl_exec($ch3)){
			echo "评论成功
"; } else{ echo curl_error($ch3); } curl_close($ch3); }

好的,现在爱游戏直播 ,自动喜欢和自动注释的功能已经完成,现在代码已集成在一起

'.$qzonetoken;
#############################################这里开始完成自动点赞的功能##########################################
    //构建点赞所需的数据包
    for($i = 0; $i < count($key); $i++){
    	//时间为时间戳格式
    	$time = time();
    	$fid  = explode('/', $key[1][$i]);
    	//数据包
    	$data = array(
		"qzreferrer"	        =>	"https://user.qzone.qq.com/".$qq,
		"opuin"			=>	$qq,
		"unikey"		=>	$key[1][$i],
		"curkey"		=>	$key[2][$i],
		"from"			=>	"1",
		"appid"			=>	"311",
		"typeid"		=>	"0",
		"abstime"		=>	$time,
		"fid"		    =>	$fid[5],
		"active"		=>	"0",
		"fupdate"		=>	"1"
		);
    	
		//使用curl发送数据包
	    $ch2 = curl_init();
	    //点赞的url格式
		$url2 = "https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=".$gtk."qzonetoken=".$qzonetoken;
		
		curl_setopt($ch2, CURLOPT_URL, $url2);
	    //设置测试用的HTTP报文头的用户信息
	    curl_setopt($ch2, CURLOPT_HTTPHEADER, $http_header);
	    //不需要报文头
	    curl_setopt($ch2, CURLOPT_HEADER, FALSE);
	    //跳过https验证
	    curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, FALSE); 
		curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, FALSE); 
		//返回响应信息而不是直接输出
    	curl_setopt($ch2, CURLOPT_RETURNTRANSFER, TRUE);
		//设置post信息
		curl_setopt($ch2, CURLOPT_POST, TRUE);
		//数据包格式
		curl_setopt($ch2, CURLOPT_POSTFIELDS, http_build_query($data));
		//开始执行
		if($output2 = curl_exec($ch2)){
			echo "点赞成功
"; } else{ echo curl_error($ch2); } curl_close($ch2); } #############################################这里开始完成自动评论的功能########################################## for($i = 0; $i < count($comment_matches[1]); $i++){ $time = time(); $data_comment = array( 'topicId' => $comment_matches[1][$i].'_'.$comment_matches[2][$i], 'feedsType' => 100, //这是说说的类型,是普通文字说说和配图说说 'inCharset' => 'utf-8', 'outCharset' => 'utf-8', 'plat' => 'qzone', 'source' => 'ic', 'hostUin' => $comment_matches[1][$i], 'isSignIn' => '', 'platformid' => 52, 'uin' => $qq, 'format' => 'fs', 'ref' => 'feeds', 'content' => $comment, 'richval' => '', 'richtype' => '', 'private' => 0, 'paramstr' => 1, 'qzreferrer' => 'https://user.qzone.qq.com/'.$qq.'/infocenter', ); //使用curl发送数据包 $ch3 = curl_init(); //点赞的url格式 $url3 = "https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_re_feeds?qzonetoken=".$qzonetoken."&g_tk=".$gtk; //echo $url2; curl_setopt($ch3, CURLOPT_URL, $url3); //设置测试用的HTTP报文头的用户信息 curl_setopt($ch3, CURLOPT_HTTPHEADER, $http_header); //不需要报文头 curl_setopt($ch3, CURLOPT_HEADER, FALSE); //跳过https验证 curl_setopt($ch3, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, FALSE); //返回响应信息而不是直接输出 curl_setopt($ch3, CURLOPT_RETURNTRANSFER, TRUE); //设置post信息 curl_setopt($ch3, CURLOPT_POST, TRUE); //数据包格式 curl_setopt($ch3, CURLOPT_POSTFIELDS, http_build_query($data_comment)); //开始执行 if($output3 = curl_exec($ch3)){ echo "评论成功
"; } else{ echo curl_error($ch3); } curl_close($ch3); } echo "系统当前时间戳为:".time(); // echo ""; ?>

写作有点混乱,如果有什么问题爱游戏体育 ,我希望可以指出来纠正它

如果您有兴趣,可以将其打包到一堂课中以加深您的理解,而且由于我有点懒,所以这是第一次编写这么长的博客

老王