1 尝试下file_get_contents(urlencode("http://forum.xinhuanet.com/listtopic.jsp?bid=50")),如果需要登录才能得到的页面,最好使用curl进行模拟登陆,毕竟curl的功能要比file_get_contents强大的多。
2 我跟你的做法一样,首先应该采集帖子列表页。获取列表页所有的帖子链接,比如你来看下这个板块:http://www.tatazu.com/bbs/forumdisplay.php?fid=4
首先应该把这个列表页所有的帖子id采集到,装入一个数组。也就是列表页内所有的http://www.tatazu.com/bbs/viewthread.php?tid=38663&extra=page%3D1链接里面的tid=38663这个参数,把这一页的所有帖子id都获取到,再去循环采集每个链接页面的帖子就可以了。这应该是最好的方法了。数据量大那是肯定的,光采集一个板块的速度就相当的慢。这跟php本身不支持多线程有关。还有一点,你必须使用时间缓存数据,这种数据不可能实时得到。1,2个小时采一次就可以了。
2 我跟你的做法一样,首先应该采集帖子列表页。获取列表页所有的帖子链接,比如你来看下这个板块:http://www.tatazu.com/bbs/forumdisplay.php?fid=4
首先应该把这个列表页所有的帖子id采集到,装入一个数组。也就是列表页内所有的http://www.tatazu.com/bbs/viewthread.php?tid=38663&extra=page%3D1链接里面的tid=38663这个参数,把这一页的所有帖子id都获取到,再去循环采集每个链接页面的帖子就可以了。这应该是最好的方法了。数据量大那是肯定的,光采集一个板块的速度就相当的慢。这跟php本身不支持多线程有关。还有一点,你必须使用时间缓存数据,这种数据不可能实时得到。1,2个小时采一次就可以了。
搜索论坛,很多内容都需要登陆,建议lz做一个功能比较齐全的http客户端程序比较好。
ZF的雷库不错,可以利用它开发:
http://framework.zend.com/manual/zh/zend.http.html2.HTML/XHTML的标签很随意,也比较复杂,用正则解析内容,个人认为不现实。
建议用html解析器
http://php-html.sourceforge.net/3.数据量大师肯定的,但是可以把数据保存到数据库,以URL为键
做采集器需要深入理解HTTP协议原理,理论方面,建议lz从理解HTTP请求处理方式、cookie的基本原理、session的实现机制等入手。
有理论作基础,写http客户端程序就变得驾轻就熟了。
至于采集多个贴子,有了url就可以采集,如果想准确采取页中的一部分,那就很麻烦了,估计google都没有好的办法,只能一个一个地定义
file_get_contents(http%3A%2F%2Fforum.xinhuanet.com%2Flisttopic.jsp%3Fbid%3D50): failed to open stream: No such file or directory英文看的懂,但这个是什么原因呢?新华网的论坛版块,直接是可以打开,不需要登录。(暂时也不准备做模拟登录的功能,大部分样本论坛可以匿名查看)