本站所有内容仅限用于学习和研究目的,如有侵权请邮件与我们联系处理!
世上事本无难易,为之则易!

网站首页 站群教程 原创站群教程 正文

使用Curl的方式采集新闻标题及文章内容的php代码

曹操 2023-06-01 原创站群教程 636 ℃ 0 评论 7966字 free 收藏

在泛目录中很多时候因为文章内容源而困扰,使用实时采集新闻文章的方式,极大的介绍了站长配置网站内容的工作量。

这里分享一段使用Curl的方式采集新闻标题及文章内容的php代码。

代码分享

本代码是一个基于php语言和simple_html_dom第三方库的爬虫程序,可以从新闻网中获取符合特定条件的新闻链接,并随机选择一条链接进行爬取,再将获取到的新闻标题和正文插入到预设的模板中,生成新的文章内容。该代码的关键功能包括:

1. 实现了多线程批量爬取新闻链接,提高了数据抓取效率;

2. 设计了一套完整的筛选规则,只获取符合条件(包含"news."、"chn"和"html"三个关键字)的新闻链接;

3. 使用simple_html_dom库解析HTML文本,精确获取新闻标题和正文信息;

4. 将新闻标题和正文插入到指定文件中,生成一篇完整的新闻文章。

本代码可用于互联网数据挖掘、新闻自动化采集及产生等多个领域。如果您需要在这些领域中提高效率,本代码值得尝试!

$html = file_get_html("https://www.xxxxxnews.com/xxxxx.shtml");
$news_links = array();
if ($html) {
    foreach ($html->find('a') as $a) {
        $href = $a->href;
        if (strpos($href, 'news.') !== false && strpos($href, 'chn') !== false && strpos($href, 'html') !== false) {
            $news_links[] = strpos($href, 'http') === false ? "https://www.xxxxxnews.com/" . $href : $href;
        }
    }
    $news_links = array_unique($news_links);
}
if (!empty($news_links)) {
    $random_link = $news_links[array_rand($news_links)];
    $chs = array();
    $mh = curl_multi_init();
    foreach ($news_links as $link) {
        $ch = curl_init();
        curl_setopt_array($ch, array(
            CURLOPT_URL => $link,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
        ));
        curl_multi_add_handle($mh, $ch);
        $chs[] = $ch;
    }
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running);
    $title = "";
    $body = "";
    foreach ($chs as $ch) {
        $html = curl_multi_getcontent($ch);
        $doc = new simple_html_dom();
        $doc->load($html);
        $doc_title = $doc->find('title', 0);
        $doc_body = $doc->find('.left_zw,.content_desc,.current_img', 0);
        if ($doc_title && $doc_body) {
            $title = $doc_title->plaintext;
            $body = $doc_body->innertext;
            break;
        }
    }
    foreach ($chs as $ch) {
        curl_multi_remove_handle($mh, $ch);
        curl_close($ch);
    }
    curl_multi_close($mh);
    $title = trim($title);
    $body = str_replace(array('【编辑:', '责任编辑:'), '', $body);
    $moban = str_replace('{文章内容}', $body, $moban);
    $moban = str_replace('{文章内容}', ContentPinyin($body), $moban);
    }
    $moban = str_replace('{文章标题}', $title, $moban);
}

代码解析

这段代码主要是通过爬虫从新闻网获取新闻链接,并随机选择一个链接进行爬取,最终将新闻标题和正文插入到一个指定的模板中,生成一个新的文章内容。具体解析如下:

1、通过file_get_html()函数获取新闻网的网页HTML内容。

$html = file_get_html("https://www.xxxxxnews.com/xxxxx.shtml");

2、对于获取到的HTML内容,使用simple_html_dom库进行解析,读取所有<a>标签,并筛选出符合条件的新闻链接(包含"news."、"chn"和"html"三个关键字)。

foreach ($html->find('a') as $a) {
    $href = $a->href;
    if (strpos($href, 'news.') !== false && strpos($href, 'chn') !== false && strpos($href, 'html') !== false) {
        $news_links[] = strpos($href, 'http') === false ? "https://www.xxxxxnews.com/" . $href : $href;
    }
}

3、对于筛选出的新闻链接数组$news_links,随机选择一个链接进行爬取,并使用curl_multi_init()函数开启多线程爬虫。

$random_link = $news_links[array_rand($news_links)];
...
$mh = curl_multi_init();
foreach ($news_links as $link) {
    $ch = curl_init();
    ...
    curl_multi_add_handle($mh, $ch);
    $chs[] = $ch;
}

4、使用do-while循环执行curl_multi_exec()函数,等待所有的线程执行完毕。

$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running);

5、对于每个链接,首先使用curl_multi_getcontent()函数获取其HTML内容,并用simple_html_dom库解析出新闻标题和正文。

foreach ($chs as $ch) {
    $html = curl_multi_getcontent($ch);
    $doc = new simple_html_dom();
    $doc->load($html);
    $doc_title = $doc->find('title', 0);
    $doc_body = $doc->find('.left_zw,.content_desc,.current_img', 0);
    if ($doc_title && $doc_body) {
        $title = $doc_title->plaintext;
        $body = $doc_body->innertext;
        break;
    }
}

6、关闭curl句柄并关闭多线程爬虫,整理新闻标题和正文的格式,并将其插入到预设好的模板中。

foreach ($chs as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);
$title = trim($title);
$body = str_replace(array('【编辑:', '责任编辑:'), '', $body);
$moban = str_replace('{文章内容}', $body, $moban);
$moban = str_replace('{文章内容}', ContentPinyin($body), $moban);
$moban = str_replace('{文章标题}', $title, $moban);

7、最后,程序会返回经过处理的模板,即生成的新闻文章。

目录导航
  • 代码分享
  • 代码解析

  • Tags:泛目录

    必看说明

    • 本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。
    • 本站文章或仅为文本内容原创,非程序原创。如有侵权、不妥之处,请联系站长第一时间删除。敬请谅解!
    • 本站所有内容严格遵守国家法律的条例,所有研究的算法技术均来源于搜索引擎公开默认允许用户研究使用的接口。
    • 阅读本文及获取资源前,请确保您已充分阅读并理解《访问曹操SEO网站需知:行为准则》。
    • 本站分享的任何工具、程序仅供学习参考编写架构,仅可在本地的虚拟机内断网测试,严禁联网运行或上传搭建!
    • 任何资源必须在下载后24个小时内,从电脑中彻底删除。不得传播或者用于其他任何用途!否则一切后果用户自负!
    • 转载请注明 : 文章转载自  曹操SEO 使用Curl的方式采集新闻标题及文章内容的php代码
    • 本文标题:《使用Curl的方式采集新闻标题及文章内容的php代码》
    • 本文链接:https://www.ccooc.cn/1994.html

    本文暂时没有评论,来添加一个吧(●'◡'●)

    欢迎 发表评论:

    网站分类
    近期评论
    文章归档
    标签列表
    站点信息
    • 文章总数:2021
    • 页面总数:7
    • 分类总数:46
    • 标签总数:340
    • 评论总数:8891
    • 浏览总数:5165013