php内容采集Warning:file_get_contents(http://auto.sina.com.cn/news/2012-07-21/0930100

gfdsagfdsa382 2012-10-01 09:26:34
三月前偶得一宝书,由杨宇等编著,清华大学出版社出版,书名《php典型模块与项目实战大全》,其中第八章,是讲内容采集的,给了一个爬虫程序,又给了一个延时函数,(脚本执行超过30秒后出现致使级错误,必须要用延时,可通过php.ini修改或延时函数),两者怎么结合书中没说,另外,无论怎么调试,都不得结果,老是出现三个错误提示:Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\\spiders.php on line 69
;Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in C:\\spiders.php on line 71
: Warning:file_get_contents(http://auto.sina.com.cn/news/2012-07-21/09301004324.shtml) [function.file-get-contents]: failed to open stream: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败!!!无语,数据库能读能写,问题应在第三个提示,怎么解决?书中介绍太笼统,该怎么用,放在哪里,以及每行的注释,全没有。
难住我了,有类似经历的朋友或能解决问题的朋友
请回复我,不胜感激。
...全文
860 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-10-06
  • 打赏
  • 举报
回复
Fatal error: Maximum execution time of 240 seconds exceeded
没有正确答复或连接的主机没有反应,连接错误:最大的执行时间为240秒
gfdsagfdsa382 2012-10-06
  • 打赏
  • 举报
回复
Fatal error: Maximum execution time of 240 seconds exceeded in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\spiders.php on line 47
这是什么意思,怎么解决
xuzuning 2012-10-05
  • 打赏
  • 举报
回复
#19 已经给出了正确的解答
gfdsagfdsa382 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
引用 17 楼 的回复:
引用 16 楼 的回复:
怎么修改?
注释掉(或删除掉)出错行
运行后如有问题,再说出

注释掉69和71行后,执行程序,显示如下错误
Warning: file_get_contents(http://auto.sina.com.cn/news/2012-09-25/07451037889.shtml) [function.file-get-content……
$row{2}的内容是:<li> <a href="(\/news\/.+?\.shtml)" title=".+?" t...
$row[3]的内容是:/<!-- publish_helper(.+?) -->(.+?)<!-- publish_hel...
[/Quote]
fjyxian 2012-10-04
  • 打赏
  • 举报
回复
1、头部加入
set_time_limit(0);

2、php.ini
allow_url_fopen = Off
改为
allow_url_fopen = On

3、file_get_contents抓取网页不是很稳定……
推荐用curl

4、mysql连接一般都是执行完自动关闭的,

5、INSERT不缓存结果可以用mysql_unbuffered_query

gfdsagfdsa382 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
怎么修改?
注释掉(或删除掉)出错行
运行后如有问题,再说出

注释掉69和71行后,执行程序,显示如下错误
Warning: file_get_contents(http://auto.sina.com.cn/news/2012-09-25/07451037889.shtml) [function.file-get-contents]: failed to ……
[/Quote]
$row[5]是数据库中数据表“spiders”的内容:http://auto.sina.com.cn/news/t
gfdsagfdsa382 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
怎么修改?
注释掉(或删除掉)出错行
运行后如有问题,再说出
[/Quote]
注释掉69和71行后,执行程序,显示如下错误
Warning: file_get_contents(http://auto.sina.com.cn/news/2012-09-25/07451037889.shtml) [function.file-get-contents]: failed to open stream: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\spiders.php on line 47

Fatal error: Maximum execution time of 240 seconds exceeded in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\spiders.php on line 47
xuzuning 2012-10-03
  • 打赏
  • 举报
回复
怎么修改?
注释掉(或删除掉)出错行
运行后如有问题,再说出
gfdsagfdsa382 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
不得不说你的宝贝是错误的
$sql = "INSERT INTO `get_content`.`articles` (`ID` ,`Title` ,`Click` ,`Content` ,`Date` ,`Category` )VALUES (NULL , '".$title."', '', '".$body."', now(), '1');"; //66行
$result1 =mysql_q……
[/Quote]
很专业,很热心,怎么修改,请给出具体答案,我试下,再次感谢。
gfdsagfdsa382 2012-10-03
  • 打赏
  • 举报
回复
再次感谢热心网友的友好相助,Mysql的问题先放放,我怀疑是Apache服务器的配置问题,因为我从其官方网站下载全的安装包,(全英文的,具体内容不太懂)然后简单修改了下其配置文件,当时目标很简单,只要能顺利运行php即可。成功。可当运行深层次或复杂程序时,恐怕就会出问题,比如现在的采集函数,尤其是与file_get_contents相关的选项;还有就是与延时相关的选项,需不需要修改配置文件或添加什么东西,这个无从得知。
gfdsagfdsa382 2012-10-02
  • 打赏
  • 举报
回复
网友真的很热心和,先谢谢你们,我下去一个个试下,虽然这个采集写得一般,但我还就认定他了,任何学习都是由易到难,推荐的网址我收藏了,日后会细心研究的;数据库连接和入库没问题,只是正则别写错了就行,其实书中提供的正则我都没看明白,最好有网友亲自实践下并调试成功了再给出答复最好,可以留下你的邮箱,我可以将全部源码及数据库传过去,供调试用。
www_7di_net 2012-10-02
  • 打赏
  • 举报
回复
这本书的编辑应该被拖出来暴打一顿才行,弄个例子还有错误代码.
这岂不是误人子弟吗!!!
尽信书不如无书.
区块链研究 2012-10-02
  • 打赏
  • 举报
回复
说实话,采集用file_get_contents是不是过时了?优先curl,fsockopen或者pfsockopen次之。最后才是file_get_contents
xuzuning 2012-10-02
  • 打赏
  • 举报
回复
不得不说你的宝贝是错误的
$sql = "INSERT INTO `get_content`.`articles` (`ID` ,`Title` ,`Click` ,`Content` ,`Date` ,`Category` )VALUES (NULL , '".$title."', '', '".$body."', now(), '1');"; //66行
$result1 =mysql_query($sql); //67行
}
mysql_free_result($result1);//这是第69行
// 关闭连接
mysql_close($db); //这是第 71 行

与之最近的 mysql_query 的是 67 行的 $result1 =mysql_query($sql);
而执行的 SQL 指令是 insert.....

由手册可知
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。

mysql_free_result() 将释放所有与结果标识符 result 所关联的内存。
由于 mysql_query 返回的是逻辑值,所以第 69 行报错

同理
bool mysql_select_db ( string database_name [, resource link_identifier] )
如果成功则返回 TRUE,失败则返回 FALSE。
$db 同样是逻辑值
因为 $db=mysql_select_db('get_content',$con);//第 15 行
所以第 71 行报错

这个代码应该没有其他严重错误
但从出错行的错误性质来看,这段代码是作者腾挪过来的,并未经实际运行检验


我不给你是否继续钻研的建议,以免人家说我误导你!
我只给你个忠告:书本不是绝对可靠的!
www_7di_net 2012-10-01
  • 打赏
  • 举报
回复
你修改一下第一行
$Category=IsSet($_GET['cid']) ? $_GET['cid'] : '';

他這個採集寫的一般,給你推薦一個
http://topic.csdn.net/u/20080824/07/0125890f-9a98-4296-ad84-c5c748c17581.html
黄袍披身 2012-10-01
  • 打赏
  • 举报
回复
我想大部分原因都是因为你的宝书内容一些参数过时了。
针对你上面的代码
你需要掌握几个地方

1.数据库的连接
2.curl的使用
3.正则取得的内容
4.数据入库

即可 不需要管这个例子都在扯什么.按照我上面的提示去学习吧.不懂再来具体的问

gfdsagfdsa382 2012-10-01
  • 打赏
  • 举报
回复
<?php
//============================
// 文件: spiders.php
// 版本: 0.0.1
// 作者:
// 更新:
// 说明: 网页采集器程序
//============================
//获得栏目id
$Category=$_GET['cid'];
if($Category){
$con = mysql_connect('localhost', 'root', '4321') or die('Could not connect: ' . mysql_error());
mysql_query("set names gb2312");
//echo 'Connected successfully';
$db=mysql_select_db('get_content',$con);
if (!$db){
die ("Can\'t use download : " . mysql_error());
}else{
// 获得提取规则数组
$sql = "SELECT * FROM `spiders` WHERE `Category`='".$Category."' ";
$result = mysql_query($sql,$con);
$row=mysql_fetch_row($result);
//var_dump ($row);
if (!$result) {
// 释放结果集
mysql_free_result($result);
}
}
}else{
exit("出错了:(");
}
//待获取页面的地址
$list_url = $row[5];
//获取链接列表
$list_content = file_get_contents($list_url);
//观察链接特征:<li> <a href="/news/2010-05-21/1705605024_4.shtml" title="自主的胜利?" target="_blank" class="fl">自主的胜利?</a><i>
//获取列表正则规则
$ch=curl_init();
$timeout=10;
curl_setopt($ch,CURLOPT_URL,$list_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$list_content=curl_exec($ch);//执行句柄
curl_close($ch);//关闭链接
$list_match = $row[2];
//获得文章内容正则规则
$content_match=$row[3];
preg_match_all($list_match,$list_content,$list_data);
$i=0;
//获取到了一个链接列表
//print_r($list_data[1]);
foreach($list_data[1] as $detail_url){
//处理一下,如果已经抓取过了,就跳过去
$detail_content = file_get_contents("http://auto.sina.com.cn" . $detail_url);
//echo ($i++);
//获取标题
preg_match('/<h1 id="artibodyTitle".+?>(.+?)<\/h1>/U',$detail_content,$title_data);
$title=$title_data[1];
//die($title);
//获取内容,需要根据不同特点写正则
preg_match_all($content_match,$detail_content,$body_data);

//die($body_data[2][0]);
$body = $body_data[2][0];

$sql = "INSERT INTO `get_content`.`articles` (`ID` ,`Title` ,`Click` ,`Content` ,`Date` ,`Category` )VALUES (NULL , '".$title."', '', '".$body."', now(), '1');";
$result1 =mysql_query($sql);
}
mysql_free_result($result1);
// 关闭连接
mysql_close($db);

?>
这是源文件中提供的爬虫程序,数据库怎么传呀?CSDN上传文件入口在哪里,有吗?其实里面就两个表,有需要的朋友加我邮箱,可以发给你。
gfdsagfdsa382 2012-10-01
  • 打赏
  • 举报
回复
呵呵,这个早就做了,凡是在百度上能搜到的,我都试过,结果找不到原因,才来到这里希望有高手解答,可以提供光盘源码,热心朋友亲自试下,以找出原因。
区块链研究 2012-10-01
  • 打赏
  • 举报
回复
<?php
$ctx = stream_context_create(
array(
'http' => array(
'timeout' => 1 //设置一个超时时间,单位为秒
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>
一起混吧 2012-10-01
  • 打赏
  • 举报
回复
php.ini 中设置
allow_url_fopen = On 后再运行看看

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧