PHP爬虫 -- 009 实战 爬取博客文章

967 阅读1分钟

先看看网站

步骤

  • 分析元素, 整理思路

  • 书写代码
  • chrome小彩蛋, 快速生成css选择器

  • 保存到markdown文件中

番外1, code runner 插件设置, 如何从终端输出

  • ctrl+shift+p
  • settings
  • 选择 open user settings

番外2, 设置vscode的默认终端

php代码

<?php
require 'vendor/autoload.php';
use QL\QueryList;
// 生成一个querylist对象
$ql = new QueryList();
/* 
 * @Description: 获取四篇博客的标题, 发布日期, 文章链接
 * @param: 主页的url
 * @return: 二维数组, 包括 title, date, url
*/ 
function get_tilte_date($url){
    // 全局的querylist对象, 防止内存溢出报错
    global $ql;
    return $ql->get($url)->rules([  //设置采集规则
        'date' => ['header > div > a > time.entry-date.published','text'], // 数组第一个元素是css选择器, 第二个是属性名
        'title' => ['header > h2 > a','text'],
        'url'=>['header > h2 > a','href']
    ])->queryData(); // queryData() 返回数组
}
/* 
 * @Description: 获取文章全部内容
 * @param: 文章的url
 * @return: 文章的内容, 字符串类型
*/ 
function get_content($url){
    global $ql;
    // 使用find()获取单元素, find()里面, 传的是css选择器, text()获取文本
    return $ql->get($url)->find('article.post.type-post.status-publish.format-standard.hentry.category-uncategorized')->text();
}

/* 
 * @Description: 创建markdown文档, 并将爬取到的数据写入
 * @param: 包含数据的一个数组
 * @return: 没有返回值
*/ 
function make_markdown($content_array){
    // 打开一个mymd.md文件, 如果没有就创建
    $md_obj = fopen('mymd.md','w+');
    foreach ($content_array as $key => $value) {
      fwrite($md_obj,"## {$value['title']}\n");   
      fwrite($md_obj,"创作时间: `{$value['date']}`\n"); 
      fwrite($md_obj,"```\n"); 
      fwrite($md_obj,"{$value['content']}`\n"); 
      fwrite($md_obj,"```\n"); 
    }
    fclose($md_obj);
}

/* 
 * @Description: 开始函数, 调用该函数, 即可开始爬虫 
 * @param: 起始url, 主页url
 * @return: 没有返回值, 会把内容写入到markdown文件里
*/ 
function start($url){
    $data = get_tilte_date($url);
    // 遍历数组, 给数组新增content元素
    foreach ($data as $key => $value) {
        $data[$key]['content'] = get_content($value['url']);
    }
    make_markdown($data);
}
// 调用start()函数, 传入起始url/主页url, 开始爬取
start("https://wordpress-edu-3autumn.localprod.forc.work/");

留个小作业

  • 爬取分类下的图书名和对应价格, 保存到books.txt
  • books.toscrape.com
  • 最终效果...

小彩蛋(点击调转到函数定义的位置)

下一节