如何进行运行前测试?

在运行爬虫框架前,我们可能需要做很多准备工作比如:登录验证测试、内容提取规则测试这个时候我们就可以把PHPSpider当做类库来使用,获取单页面HTML并测试提取规则

内容提取测试

接下来我们以epooll这个站点的谋篇文章为例来演示内容提取方法

获取HTML内容

  1. $url = "http://www.epooll.com/archives/806/";
  2. $html = requests::get($url);

提取文章标题

  1. // 选择器规则
  2. $selector = "//div[contains(@class,'page-header')]//h1/a";
  3. // 提取结果
  4. $result = selector::select($html, $selector);
  5. echo $result;

提取文章作者

  1. $selector = "//div[contains(@class,'page-header')]//h6/span[1]";
  2. $result = selector::select($html, $selector);
  3. // 处理数据
  4. $result = str_replace("作者:", "", $result);
  5. echo $result;

提取文章入库完整示例

  1. $url = "http://www.epooll.com/archives/806/";
  2. $html = requests::get($url);
  3. // 抽取文章标题
  4. $selector = "//div[contains(@class,'page-header')]//h1/a";
  5. $title = selector::select($html, $selector);
  6. // 检查是否抽取到标题
  7. //echo $title;exit;
  8. // 抽取文章作者
  9. $selector = "//div[contains(@class,'page-header')]//h6/span[1]";
  10. $author = selector::select($html, $selector);
  11. // 检查是否抽取到作者
  12. //echo $author;exit;
  13. // 去掉 作者:
  14. $author = str_replace("作者:", "", $author);
  15. // 抽取文章内容
  16. $selector = "//div[contains(@class,'entry-content')]";
  17. $content = selector::select($html, $selector);
  18. // 检查是否抽取到内容
  19. //echo $author;exit;
  20. $data = array(
  21. 'title' => $title,
  22. 'author' => $author,
  23. 'content' => $content,
  24. );
  25. // 查看数据是否正常
  26. //print_r($data);
  27. // 入库
  28. db::insert("content", $data);

运行PHPSpider

通过上面的测试,我们就找出了文章内容页的field规则,配置到fields,然后调用PHPSpider

  1. 'fields' => array(
  2. // 文章标题
  3. array(
  4. 'name' => "article_title",
  5. 'selector' => "//div[contains(@class,'page-header')]//h1/a",
  6. 'required' => true,
  7. ),
  8. // 文章作者
  9. array(
  10. 'name' => "article_author",
  11. 'selector' => "//div[contains(@class,'page-header')]//h6/span[1]",
  12. 'required' => true,
  13. ),
  14. // 文章内容
  15. array(
  16. 'name' => "article_content",
  17. 'selector' => "//div[contains(@class,'entry-content')]",
  18. 'required' => true,
  19. ),
  20. )