采集论坛的小程序(已过期)

作者:enenba | 发表于:2012-02-19 22:19 | 分类:php采集

写了个采集论坛的小程序。里面包括了模拟登陆,获取页面源代码,正则匹配结果等部分,希望对大家有用。

这个是09年的东西了,例子中的论坛已经不存在,是不是discuz我也不知道。不过还是可以学到一些东西。

<?php 
// 吴燕军
// 2009-06-27
// 采集程序php
set_time_limit(0); 
// cookie保存目录
$cookie_jar = '/tmp/cookie.tmp';

/**
 * 函数------------------------------------------------------------------------------------------------------------
 */ 
// 模拟请求数据
function request($url, $postfields, $cookie_jar, $referer) {
	$ch = curl_init();
	$options = array(CURLOPT_URL => $url,
		CURLOPT_HEADER => 0,
		CURLOPT_NOBODY => 0,
		CURLOPT_PORT => 80,
		CURLOPT_POST => 1,
		CURLOPT_POSTFIELDS => $postfields,
		CURLOPT_RETURNTRANSFER => 1,
		CURLOPT_FOLLOWLOCATION => 1,
		CURLOPT_COOKIEJAR => $cookie_jar,
		CURLOPT_COOKIEFILE => $cookie_jar,
		CURLOPT_REFERER => $referer
		);
	curl_setopt_array($ch, $options);
	$code = curl_exec($ch);
	curl_close($ch);
	return $code;
} 
// 获取帖子列表
function getThreadsList($code) {
	preg_match_all('/ <!--[.|\r|\n]*? <a href=\"viewthread.php\?tid=(\d+)/', $code, $threads);
	return $threads[1];
} 
// 判断该帖子是否存在
function isExits($code) {
	preg_match('/ <p>指定的主题不存在或已被删除或正在被审核,请返回。 <\/p>/', $code, $error);
	return isset($error[0])?false:true;
} 
// 获取帖子标题
function getTitle($code) {
	preg_match('/ <h1>[^ <\/h1>]*/', $code, $title_tmp);
	$title = $title_tmp[0];
	return $title;
} 
// 获取帖子作者:
function getAuthor($code) {
	preg_match('/ <a href=\"space.php\?uid=\d+\" target=\"_blank\" id=\"userinfo\d+\" onmouseover=\"showMenu\(this\.id\)\">.+/', $code, $author_tmp);
	$author = strip_tags($author_tmp[0]);
	return $author;
} 
// 获取楼主发表的内容
function getContents($code) {
	preg_match('/ <div id=\"postmessage_\d+\" class=\"t_msgfont\">(.|\r|\n)*? <\/div>/', $code, $contents_tmp);
	$contents = preg_replace('/images\//', 'http://bbs.war3.cn/images/', $contents_tmp[0]);
	return $contents;
} 
// 打印帖子标题
function printTitle($title) {
	echo " <strong> <h2>帖子标题: </h2> </strong>", strip_tags($title), " <br/> <br/>";
} 
// 输出帖子作者
function printAuthor($author) {
	echo " <strong> <h2>帖子作者: </h2> </strong>", strip_tags($author), " <br/> <br/>";
} 
// 打印帖子内容
function printContents($contents) {
	echo " <strong> <h2>作者发表的内容: </h2>", $contents, " </strong> <br/>";
} 
// 错误
function printError() {
	echo " <i>该帖子不存在! </i>";
} 

/**
 * 函数列表end---------------------------------------------------------------------------------------------------
 */

/**
 * 登录论坛 begin
 */
$url = 'http://bbs.war3.cn/logging.php?action=login';
$postfields = 'loginfield=username&username=1nject10n&password=xxxxxx&questionid=0&cookietime=315360000&referer=http://bbs.war3.cn/&loginsubmit=提交';
request($url, $postfields, $cookie_jar, '');
unset($postfields, $url);
/**
 * 登录论坛 end
 */

/**
 * 获取帖子列表(位于第一页的帖子) begin
 */
$url = 'http://bbs.war3.cn/forumdisplay.php?fid=57';
$code = request($url, '', $cookie_jar, '');
$threadsList = getThreadsList($code);
/**
 * 获取帖子列表 end
 */ 
// 帖子序列
$rows = 0;

/**
 * 循环抓取所有帖子源代码 begin
 */
foreach($threadsList as $list) {
	$url = "http://bbs.war3.cn/viewthread.php?tid=$list";

	if (isExits($code)) {
		$code = request($url, '', $cookie_jar, '');
		$color = $rows % 2 == 0?'#00CCFF':'#FFFF33';
		echo " <div style='background-color:$color'>";
		echo " <h1>第", ($rows + 1), "贴: </h1> <br/>";
		$author = getAuthor($code);
		printAuthor($author);

		$title = getTitle($code);
		printTitle($title);

		$contents = getContents($code);
		printContents($contents);
		echo " </div>";
		$rows++;
	} else
		printError();

	echo "----------------------------------------------------------------------------------------- <br/> <br/>";
} 
/**
 * 抓取源代码 end
 */
?>

end

上一篇: html 下拉选择框改变输入框中字的颜色   |   下一篇:今天我终于把我enenba的w3c认证做上去了» 标签: php采集 数据采集 PHP正则

评论: