富貴教你用PHP爬取掘金文章

前言

'項目圖片'
最近忙完了項目比較空就打算深刻學習一些關於爬蟲的知識,之前讀書的時候就喜歡用爬蟲去爬一些學習網站(波多野**老師)。寫這篇博客是想對以前學習的一些爬蟲知識作一個梳理和交流。但願有大佬指出不足,幫我成長。

新手村任務

下面這些是我2018年這半年業餘時間研究的一些小東西,比較適合剛開始接觸爬蟲的人php

  • 文章爬蟲(搜狗微信文章、某書、還有今日頭條等)
  • 音樂類的數據爬蟲(主要基於NodeJS,網易雲音樂的社區API)
  • 微信文章點贊爬蟲

平時爬東西經常使用的工具推薦html

  • Charles (抓包工具)
  • Anyproxy 也是一個抓包工具可是能夠編程比較好玩
  • adb 安卓調試橋 能夠用python腳本控制安卓手機自動執行腳本
  • simulator 網頁抓包必備、還能夠寫自動化測試腳本

迴歸正題爬掘金文章

首先我打算使用最原始的方式去獲取掘金的文章內容。我使用了PHP的curl和phpQuery來作這件事情。我發現文章內容獲取到的是空。並且像圖片這些資源是用<image>這樣的標籤包起來的沒有獲得正常解析。python

很顯然掘金的文章是異步加載的。並且經過curl去獲取文章會發現文章內容是加密過的。
(我沒有太多時間去研究他的加密規則)
複製代碼

個人思路很簡單直接抓取渲染事後的數據。通常來說要達到這個效果可使用 simulator和phantomjs。使用simulator我本地是OK的好想服務器爆錯了後來就用了phantomjs。編程

下面講解一下這個項目須要的依賴和注意事項json

一、注意事項(選擇國內的源)

composer 方法一: 修改 composer 的全局配置文件(推薦方式) 打開命令行窗口(windows用戶)或控制檯(Linux、Mac 用戶)並執行以下命令:windows

composer config -g repo.packagist composer https://packagist.phpcomposer.com
複製代碼

方法二: 修改當前項目的 composer.json 配置文件: 打開命令行窗口(windows用戶)或控制檯(Linux、Mac 用戶),進入你的項目的根目錄(也就是 composer.json 文件所在目錄),執行以下命令:bash

composer config repo.packagist composer https://packagist.phpcomposer.com
複製代碼

二、須要安裝的依賴

composer require "jonnyw/php-phantomjs:4.*"
複製代碼

三、Linux環境的特殊需求(修改依賴文件)

namespace JonnyW\PhantomJs\DependencyInjection;

 /**
     * Load service container.
     *
     * @access public
     * @return void
     */
    public function load($file = null)
    {
        $loader = new YamlFileLoader($this, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('config.yml');
        $loader->load('services.yml');

        $this->setParameter('phantomjs.cache_dir', sys_get_temp_dir());
        $this->setParameter('phantomjs.resource_dir', __DIR__.'/../Resources');
    }

複製代碼

修改PHP.ini開啓一些系統函數 服務器

上代碼

$client = Client::getInstance();

        $client->getEngine()->setPath(ROOT_PATH . 'public' . DS . 'phantomjs'); //設置phantomjs位置
        $client->getEngine()->addOption('--load-images=false');
        $client->getEngine()->addOption('--ignore-ssl-errors=true');

        $url = 'https://juejin.im/entry/5c01b3016fb9a04a0b21e766';
        $request = $client->getMessageFactory()->createRequest($url, 'GET');

        $timeout = 10000; //設置超時
        $request->setTimeout($timeout);

        $response = $client->getMessageFactory()->createResponse();
        $client->send($request, $response);


        $str = $response->getContent();

        $num1 = strpos($str, '<article');
        $num2 = strpos($str, '</article>');


        $re_data = substr($str, $num1, $num2 - $num1);

        $re_data .= '</article>';
        $re_data = str_replace("data-src","src",$re_data);
//        file_put_contents('3.html', $re_data);
        return $re_data;
複製代碼

看效果

總結

這個爬蟲比較簡陋尚未作成全自動的、分佈式、多線程的,PHP是世界上最好的編程語言。晚上想寫一篇關於編程語言的文章。微信

相關文章
相關標籤/搜索