下面这些是我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是世界上最好的编程语言。晚上想写一篇关于编程语言的文章。微信