下面這些是我2018年這半年業餘時間研究的一些小東西,比較適合剛開始接觸爬蟲的人php
平時爬東西經常使用的工具推薦html
首先我打算使用最原始的方式去獲取掘金的文章內容。我使用了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.*"
複製代碼
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是世界上最好的編程語言。晚上想寫一篇關於編程語言的文章。微信