校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息操作示例

php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息操作示例

熱門(mén)標(biāo)簽:邢臺(tái)400電話辦理 正規(guī)電銷機(jī)器人系統(tǒng) 辦理400電話哪家好點(diǎn) 嘟嘟云外呼系統(tǒng) 咸陽(yáng)電銷 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式 南京3D地圖標(biāo)注 南寧電話外呼系統(tǒng)線路 重慶外呼電銷系統(tǒng)多少錢(qián)

本文實(shí)例講述了php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息。分享給大家供大家參考,具體如下:

我們使用pthreads,來(lái)寫(xiě)一個(gè)多線程的抓取頁(yè)面小程序,把結(jié)果存到數(shù)據(jù)庫(kù)里。

數(shù)據(jù)表結(jié)構(gòu)如下:

CREATE TABLE `tb_sina` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `url` varchar(256) DEFAULT '' COMMENT 'url地址',
 `title` varchar(128) DEFAULT '' COMMENT '標(biāo)題',
 `time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '時(shí)間',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sina新聞';

代碼如下:

?php

class DB extends Worker
{
  private static $db;
  private $dsn;
  private $root;
  private $pwd;

  public function __construct($dsn, $root, $pwd)
  {
    $this->dsn = $dsn;
    $this->root = $root;
    $this->pwd = $pwd;
  }

  public function run()
  {
    //創(chuàng)建連接對(duì)象
    self::$db = new PDO($this->dsn, $this->root, $this->pwd);

    //把require放到worker線程中,不要放到主線程中,不然會(huì)報(bào)錯(cuò)找不到類
    require './vendor/autoload.php';
  }

  //返回一個(gè)連接資源
  public function getConn()
  {
    return self::$db;
  }
}

class Sina extends Thread
{
  private $name;
  private $url;

  public function __construct($name, $url)
  {
    $this->name = $name;
    $this->url = $url;
  }

  public function run()
  {
    $db = $this->worker->getConn();

    if (empty($db) || empty($this->url)) {
      return false;
    }

    $content = file_get_contents($this->url);
    if (!empty($content)) {
      //獲取標(biāo)題,地址,時(shí)間
      $data = QL\QueryList::Query($content, [
        'tit' => ['.c_tit > a', 'text'],
        'url' => ['.c_tit > a', 'href'],
        'time' => ['.c_time', 'text'],
      ], '', 'UTF-8', 'GB2312')->getData();

      //把獲取的數(shù)據(jù)插入數(shù)據(jù)庫(kù)
      if (!empty($data)) {
        $sql = 'INSERT INTO tb_sina(`url`, `title`, `time`) VALUES';
        foreach ($data as $row) {
          //修改下時(shí)間,新浪的時(shí)間格式是這樣的04-23 15:30
          $time = date('Y') . '-' . $row['time'] . ':00';
          $sql .= "('{$row['url']}', '{$row['tit']}', '{$time}'),";
        }
        $sql = rtrim($sql, ',');
        $ret = $db->exec($sql);

        if ($ret !== false) {
          echo "線程{$this->name}成功插入{$ret}條數(shù)據(jù)\n";
        } else {
          var_dump($db->errorInfo());
        }
      }
    }
  }
}

//抓取頁(yè)面地址
$url = 'http://roll.news.sina.com.cn/s/channel.php?ch=01#col=89spec=type=ch=01k=offset_page=0offset_num=0num=60asc=page=';
//創(chuàng)建pool池
$pool = new Pool(5, 'DB', ['mysql:dbname=test;host=192.168.33.226', 'root', '']);

//獲取100個(gè)分頁(yè)數(shù)據(jù)
for ($ix = 1; $ix = 100; $ix++) {
  $pool->submit(new Sina($ix, $url . $ix));
}

//循環(huán)收集垃圾,阻塞主線程,等待子線程結(jié)束
while ($pool->collect()) ;
$pool->shutdown();

由于使用到了QueryList,大家可以通過(guò)composer進(jìn)行安裝。

composer require jaeger/querylist

不過(guò)安裝的版本是3.2,在我的php7.2下會(huì)有問(wèn)題,由于each()已經(jīng)被廢棄,所以修改下源碼,each()全換成foreach()就好了。

運(yùn)行結(jié)果如下:

數(shù)據(jù)也保存進(jìn)了數(shù)據(jù)庫(kù)

當(dāng)然大家也可以再次通過(guò)url,拿到具體的頁(yè)面內(nèi)容,這里就不做演示了,有興趣的可以自已去實(shí)現(xiàn)。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP進(jìn)程與線程操作技巧總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP pthread拓展使用和注意點(diǎn)
  • PHP pthreads v3下worker和pool的使用方法示例
  • PHP pthreads v3下同步處理synchronized用法示例
  • PHP pthreads v3使用中的一些坑和注意點(diǎn)分析
  • PHP中使用pthread拓展

標(biāo)簽:唐山 通遼 南通 黃山 河南 平頂山 武漢 隴南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息操作示例》,本文關(guān)鍵詞  php,使用,pthreads,多,線程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息操作示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于php使用pthreads v3多線程實(shí)現(xiàn)抓取新浪新聞信息操作示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 玉树县| 绿春县| 永州市| 银川市| 昆明市| 星座| 东山县| 多伦县| 阿城市| 铜山县| 宜黄县| 大宁县| 吉木萨尔县| 友谊县| 富阳市| 定襄县| 遂平县| 天柱县| 天气| 西贡区| 奉贤区| 简阳市| 台北县| 南投县| 霍邱县| 丽水市| 舟山市| 惠东县| 封开县| 潍坊市| 集安市| 平阳县| 青铜峡市| 纳雍县| 会东县| 新河县| 如皋市| 民权县| 荆门市| 华安县| 乌鲁木齐县|