百度知道的php爬虫
<?php
class spider
{
private $content ;
private $contentlen ;
private $BestAnswer ;
private $CurPosition ;
function GetStart( $iStart
)
{
return
strpos( $this->content , '>' ,
$iStart )+1 ;
}
function GetContent ( $url
)
{
$this->content =
file_get_contents($url);
$this->contentlen = strlen(
$this->content ) ;
$start =
strpos( $this->content ,
'<title>') ;
$start =
$this->GetStart( $start ) ;
$end =
strpos( $this->content ,
'</title>' , $start )
;
$title =
substr( $this->content , $start ,
$this->$end-$start ) ;
if ( strpos(
$title , '_百度知道' , 1 ) < 1 )
{
return false;
}
return ture
;
}
function GetTitle()
{
$start =
strpos( $this->content ,
'<title>') ;
if ( $start
> 0 )
{
$start = $this->GetStart( $start )
;
$end = strpos( $this->content ,
'</title>' , $start )
;
$this->CurPosition = $end ;
return substr( $this->content , $start , $end-$start
) ;
}
return NULL
;
}
function GetQTitle()
{
$start =
strpos( $this->content , 'span
class="question-title"' , $this->CurPosition )
;
if ( $start
> 0 )
{
$start = $this->GetStart( $start )
;
$end = strpos( $this->content ,
'</span>' , $start )
;
$this->CurPosition = $end ;
return substr( $this->content , $start , $end-$start
) ;
}
return NULL
;
}
function
GetClassFly()
{
;
}
function
GetQContent()
{
$start = strpos( $this->content , 'pre
id="question-content"' , $this->CurPosition )
;
if ( $start > 0 )
{
$start = $this->GetStart( $start )
;
$end = strpos( $this->content ,
'</pre>' , $start )
;
$this->CurPosition = $end ;
return substr( $this->content , $start , $end-$start
) ;
}
return NULL ;
}
function GetQsuply()
{
$start =
strpos( $this->content , 'id="question-suply"' ,
$this->CurPosition ) ;
if ( $start
> 0 )
{
$start = $this->GetStart( $start )
;
$end = strpos( $this->content ,
'</pre>' , $start )
;
$this->CurPosition = $end ;
return substr( $this->content , $start , $end-$start
) ;
}
return NULL
;
}
function GetAnswer()
{
$start =
strpos( $this->content , 'class="reply-text mb10"' ,
$this->CurPosition ) ;
if ( $start
> 0 )
{
$start = $this->GetStart( $start )
;
$end = strpos( $this->content ,
'</pre>' , $start )
;
$this->CurPosition = $end ;
return substr( $this->content , $start , $end-$start
) ;
}
return NULL
;
}
}
ini_set('max_execution_time', '0');
$TestSpider = new spider() ;
$Startqid = 1000001 ;
$sndqid = 1000051 ;
$standurl = 'http://zhidao.baidu.com/question/'
;
$html = '.html' ;
$url ;
$NoUse = 0 ;
function microtime_float()
{
list($usec, $sec) = explode(" ",
microtime());
return ((float)$usec +
(float)$sec);
}
$time_start = microtime_float();
$answer ;
for ($i = $Startqid ; $i < $sndqid ; $i++
)
{
$url = $standurl.$i.$html
;
if ( $TestSpider->GetContent (
$url ) )
{
echo
'<br>正在爬取编号为'.$i.'的网页<br>'
;
$TestSpider->GetTitle() ;
//得到网页标题,不用显示了
echo
'<font
color="green">问题:</font><font
color="red"><a target="_blank"
href="'.$url.'">
'.$TestSpider->GetQTitle().'</a></font><br>'
; //得到问题题目
echo
'<font
color="green">问题具体内容:</font>'.$TestSpider->GetQContent().'</font><br>'
; //得到问题内容,有可能不存在
echo
'<font
color="green">问题补充说明:</font>'.$TestSpider->GetQsuply().'</font><br>'
; //问题补充说明,有可能不存在
while (
($answer = $TestSpider->GetAnswer()) != NULL
)
{
echo '<font
color="green">问题答案:</font>'.$answer.'</font><br>'
; //得到答案。有可能没有答案!
}
ob_flush()
;
flush()
;
}
else
{
echo
'<p>错误了<a
target="_blank" href="'.$url.'" style=
"color:#ff0000">'.$url.'</a></p>'
;
$NoUse++
;
}
}
$time_end = microtime_float();
$time = $time_end - $time_start;
$i = $i-$Startqid ;
echo
'<p>爬取'.$i.'个网页用时'.$time.'秒</p>其中跳过'.$NoUse.'个无效网页!'
;
?>
百度知道的php爬虫的更多相关文章
- 我们必须要知道的RESTful服务最佳实践
看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标 ...
- 隔壁小孩都要知道的Drupal配置
i春秋作家:Arizona 原文来自:隔壁小孩都要知道的Drupal配置 隔壁小孩都要知道的Drupal配置 Drupal是一个开源的PHP内容管理系统,具有相当复杂的架构.它还具有强大的安全模型.感 ...
- 程序员必须要知道的Hadoop的一些事实
程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...
- 【转载】在IT界取得成功应该知道的10件事
在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...
- 理工科应该的知道的C/C++数学计算库(转)
理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件 ...
- 你应该知道的10个奇特的 HTML5 单页网站
网页设计师努力寻找新的方式来展现内容.其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且美丽的网站. 下面是10个令人惊叹的单页 H ...
- Git / 程序员需要知道的12个Git高级命令
众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...
- 你应该知道的RPC原理
你应该知道的RPC原理 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互 ...
- 希望早几年知道的5个Unix命令
原文: http://spin.atomicobject.com/2013/09/09/5-unix-commands/ 希望早几年知道的5个Unix命令 使用*nix系统已经有一段时间了.但是还是有 ...
随机推荐
- Linux中的随机数文件 /dev/random /dev/urandom
Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random.他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特 ...
- PHP 'ext/soap/php_xml.c'不完整修复多个任意文件泄露漏洞
漏洞版本: PHP 5.4.1 PHP 5.3.13 PHP 5.3.12 PHP 5.3.11 PHP 5.3.10 PHP 5.3.1 PHP 5.3 漏洞描述: BUGTRAQ ID: 6237 ...
- SharePoint 2010中使用Visual Studio 2010进行方便快速的Web Part开发
转:http://www.cnblogs.com/fatwhale/archive/2010/02/24/1672633.html 在Visual Studio 2010中, 已经集成了用于Shar ...
- cocos2d-x 遇到的错误与解决方法。make: *** No rule to make target `/cygdrive/d/android/cocos2d-x-master/T12/proj.android/../../cocos2dx/xxxxx.cpp'
cocos2d-x 遇到的错误与解决方法.make: *** No rule to make target `/cygdrive/d/android/cocos2d-x-master/T12/proj ...
- [转]IIS上部署网站
如何在IIS6,7中部署ASP.NET网站 阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 添加扩展名映射 IIS6 无扩展名的映射 目录的写入权限 SQL SERVER的 ...
- hive中sql解析出对应表和字段的实现
import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.Map ...
- 2013 ACM区域赛长沙 A Alice’s Print Service HDU 4791
题意:就是一个打印分段收费政策,印的越多,单张价格越低,输入需要印刷的数量,求最小印刷费用一个细节就是,比当前还小的状态可能是最后几个. #include<stdio.h> #includ ...
- Linux IIO子系统分析
最近稍微看了下LKML,发现里面有一个子系统叫做“IIO”.以前没有接触过,所以Google了下. IIO子系统全称是 Industrial I/O subsystem(工业 I/O 子系统) ...
- HOST1PLUS 的 VPS 主機-絕佳的性能和特惠的價格
HOST1PLUS 的 VPS 主機-絕佳的性能和特惠的價格 undefined Open Container Project undefined 80后美女董事长吴艳:嫁得好不一定比干得好容易 - ...
- hdoj 5137 How Many Maos Does the Guanxi Worth【最短路枚举+删边】
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...