新闻采集php源码,基于php的新闻发布系统

发布时间:2023-01-08

本文目录一览:

  1. 求带登录的网站采集php源码或思路
  2. 求抓取网页内容的程序或代码(两层或更多,delphi)
  3. php获取网页源码内容有哪些办法

求带登录的网站采集php源码或思路

获取链接的数据以后,加个判断:如果需要登陆 ,则使用php的curl函数来模拟post;不需要登陆则直接采集。

求抓取网页内容的程序或代码(两层或更多,delphi)

抓取网页内容,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去。其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等。 目前网页采集多为3P代码为多(3P即ASP、PHP 、JSP)。用得最有代表的就动易科技公司BBS中新闻采集系统,和网上流传的新浪新闻采集系统等都是用ASP程序来使用,但速度从理论上来说不是很好。如果尝试用其它软件的多线程采集是不是更快?答案是肯定的。用DELPHI、VC、VB、JB都可以,PB似乎比较不好做。以下用DELPHI来解释采集网页数据。

一、 简单的新闻采集

新闻采集是最简单的,只要识别标题、副题、作者、出处、日期、新闻主体、分页就可以了。在采集之前肯定要取得网页的内容,所以在DELPHI里加入idHTTP控件(在indy Clients面板),然后用idHTTP1.GET 方法取得网页的内容,声明如下:

function Get(AURL: string): string; overload;

AURL参数,是string类型,指定一个URL地址字符串。函数返回也是string类型,返回网页的HTML源文件。比如我们可以这样调用:

tmpStr:= idHTTP1.Get('');

调用成功后,tmpstr变量里存储的就是网易主页的代码了。 接下来,讲一下数据的截取,这里,我定义了这么一个函数:

function TForm1.GetStr(StrSource,StrBegin,StrEnd:string):string;
var
  in_star,in_end:integer;
begin
  in_star:=AnsiPos(strbegin,strsource)+length(strbegin);
  in_end:=AnsiPos(strend,strsource);
  result:=copy(strsource,in_star,in_end-in_star);
end;
  • StrSource:string类型,表示HTML源文件。
  • StrBegin:string类型,表示截取开始的标记。
  • StrEnd:string,表示截取结束的标记。 函数返回字符串StrSource中从StrSource到StrBegin之间的一段文本。 比如:
strtmp:=TForm1.GetStr('A123BCD','A','BC');

运行后,strtmp的值为:'123'。 关于函数里用到的AnsiPos和copy,都是系统定义的,可以从delphi的帮助文件里找到相关说明,我在这里也简单罗嗦一下:

  • function AnsiPos(const Substr, S: string): Integer
    返回Substr在S中第一次出现的位置。
  • function copy(strsource,in_sta,in_end-in_star): string;
    返回字符串strsource中,从in_sta(整型数据)开始到in_end-in_star(整型数据)结束的字符串。 有了以上函数,我们就可以通过设置各种标记,来截取想要的文章内容了。在程序中,比较麻烦的是我们需要设置许多标记,要定位某一项内容,必须设置它的开始和结束标志。比如要取得网页上的文章标题,必须事先查看网页代码,查看出文章标题前边和后边的一些特征代码,通过这些特征代码,来截取文章的标题。 下面我们来实际演示一下,假设要采集的文章地址为 代码为:
<html>
<head>
  <meta http-equiv="Content-Language" content="zh-cn">
  <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
  <meta name="ProgId" content="FrontPage.Editor.Document">
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title>新建网页 1</title>
</head>
<body>
  <p align="center"><b>文章标题</b></p>
  <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
    <tr><td width="60%">作者</td><td width="40%">出处</td></tr>
  </table>
  <p><font size="2">这里是文章内容正文。</font></p>
  <a href='..new_pr.asp'>上一页</a> <a href='new_ne.asp'>下一页</a>
</body>
</html>

第一步,我们用StrSource:= idHTTP1.Get('');将网页代码保存在strsource变量中。 然后定义strTitlestrAuthorstrCopyFromstrContent

strTitle:= GetStr(StrSource,' p align="center"<b',' </b>/p'):
strAuthor:= GetStr(StrSource,' tr<td width="60%"',' </td'):
strCopyFrom:= GetStr(StrSource,' td width="40%"',' </td>/tr'):
strContent:= GetStr(StrSource,' <p<font size="2">', ' </font>/p'):

这样,就能把文章的标题、副题、作者、出处、日期、内容和分页分别存储在以上变量中。 第二步,用循环的办法,打开下一页,并取得内容,加到strContent变量中。

StrSource:= idHTTP1.Get('new_ne.asp');
strContent:= strContent +GetStr(StrSource,' <p<font size="2">', ' </font>/p'):

然后再判断有没有下一页,如果还有就接着取得下一页的内容。 这样就完成了一个简单的截取过程。从以上的程序代码可以看到,我们使用的截取办法都是找截取内容的头部和尾部的,如果遇到这个头部和尾部有多个怎么办?似乎没办法,只会找到第一个,所以在找之前应该验证一下是不是只有一处有这个截取的内容的前后部。

希望可以给你些帮助:)

php获取网页源码内容有哪些办法

可以参考以下几种方法:

方法一:file_get_contents获取

$url = "";
$fh = file_get_contents("");
echo $fh;

方法二:使用fopen获取网页源代码

$url = "";
$handle = fopen ($url, "rb");
$contents = "";
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
echo $contents; //输出获取到得内容。

方法三:使用CURL获取网页源代码

$url = "";
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$curl = curl_init(); //创建一个新的CURL资源
curl_setopt($curl, CURLOPT_URL, $url); //设置URL和相应的选项
curl_setopt($curl, CURLOPT_HEADER, 0);  //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定是否显示头信息,1显示,0不显示。//如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, ''); //设置编码格式,为空表示支持所有格式的编码
//header中“Accept-Encoding: ”部分的内容,支持的编码格式为:"identity","deflate","gzip"。
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
//设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功
curl_close($curl); //关闭cURL资源,并释放系统资源

拓展资料

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。 用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。 参考资料:PHP(超文本预处理器)-百度百科