在开始之前,请务必了解以下几点:

(图片来源网络,侵删)
- 版权问题:直接抓取他人网站的内容并发布可能涉及侵犯版权,请确保你有权使用这些内容,或者只抓取允许抓取的内容(使用官方 API 的网站),最好的做法是抓取摘要,并附上原文链接,作为“文章聚合”或“内容索引”。
- 网站服务条款:许多网站的服务条款禁止未经授权的抓取行为,频繁或大量的抓取可能会对你的服务器 IP 地址进行封禁。
- 技术风险:目标网站的结构可能会随时更改,这会导致你的抓取规则失效,需要重新配置。
使用 WordPress 插件(最简单、推荐)
对于大多数用户来说,使用现成的插件是最佳选择,它们通常有图形界面,操作简单,且能处理大部分情况。
推荐插件:WP RSS Aggregator (主要用于 RSS,但可扩展) 或 All in One WP Migration (用于完整迁移)
更直接符合你需求的插件是 WP Scraper 或 Content Egg 这类专门用于内容抓取的插件,这里我以一个功能强大且灵活的插件 WP RSS Aggregator 为例,因为它非常流行,并且通过其扩展可以实现你想要的功能,另一个更直接的选项是 Web Scraper by WPManageNinja。
以 Web Scraper by WPManageNinja 为例的详细步骤:
这个插件专门为抓取网页内容而设计,非常直观。
-
安装插件:
(图片来源网络,侵删)- 在你的 WordPress 后台,导航到 插件 > 安装插件。
- 搜索 “Web Scraper by WPManageNinja”。
- 点击“立即安装”,然后激活插件。
-
创建新的抓取任务:
- 激活后,在左侧菜单中会出现一个新的选项 Web Scraper。
- 点击进入,然后点击 “Add New Scraper” (添加新的抓取器)。
-
配置抓取器:
- 名称:给你的抓取任务起一个名字,我的科技博客采集”。
- URL:在这里输入你想要采集的网页网址,
https://example.com/some-article。 - 抓取模式:选择你想要抓取的内容类型,通常你会选择:
- 文章:它会尝试自动识别标题、内容、特色图片等。
- 自定义:如果你需要抓取页面上的特定元素(比如某个 div、某个列表),可以选择这个模式,并使用 CSS 选择器来定位元素。
-
映射:
- 这是核心步骤,你需要告诉 WordPress 将抓取到的内容放到文章的哪个位置。
- 插件通常会自动识别,如果没有,你可以使用浏览器的“检查元素”功能,找到标题标签的 CSS 选择器(
h1.entry-title)并填入。 - 同样,插件会尝试抓取正文,如果失败,你需要手动找到正文所在的容器(
div.post-content或article p)并将其 CSS 选择器填入。 - 特色图片:选择文章中的哪张图片作为特色图片,你可以设置规则,抓取第一张图片”或“抓取特定 class 的图片”。
- 发布状态:选择“已发布”、“待审核”或“草稿”。
- 作者:选择文章的作者。
- 分类:选择或创建文章的分类。
- 可以设置为从标题中自动提取,或者留空。
-
保存并运行抓取:
(图片来源网络,侵删)- 配置完成后,点击 “Save Scraper” 保存任务。
- 然后点击 “Run Scraper” (运行抓取器)。
- 插件会访问你指定的网址,根据你的规则抓取内容,并自动创建一篇新文章。
-
**自动化设置(可选):
- 如果你希望定期自动抓取该网页的内容(如果它是一个博客的 RSS 源或会定期更新的页面),你可以在抓取器设置中配置一个 定时任务,每天一次”或“每周一次”。
使用代码(适合开发者)
如果你熟悉 PHP,并且希望获得更灵活、更强大的控制,可以通过编写自定义代码来实现,这通常需要使用到 PHP 的 DOMDocument 和 DOMXPath 类来解析 HTML。
警告:此方法需要修改主题的 functions.php 文件或创建一个自定义插件,操作不当可能导致网站出错。请务必先备份你的网站!
以下是一个简单的示例代码,它会抓取一个网页的标题和第一个段落,并创建一篇 WordPress 文章。
/**
* 通过 URL 抓取网页内容并创建 WordPress 文章
*
* @param string $url 要抓取的网页 URL
*/
function scrape_and_create_post($url) {
// 1. 获取网页内容
$response = wp_remote_get($url);
// 检查请求是否成功
if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
error_log('无法获取 URL: ' . $url);
return;
}
$html = wp_remote_retrieve_body($response);
// 2. 创建 DOMDocument 对象并加载 HTML
// 使用 @ 符号抑制因为 HTML5 标签可能产生的警告
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 禁用 libxml 错误,因为很多 HTML 页面格式不标准
$dom->loadHTML($html);
libxml_clear_errors();
// 3. 使用 DOMXPath 查询 HTML 元素
$xpath = new DOMXPath($dom);
// 4. 提取数据 (这里需要根据目标网页的 HTML 结构进行修改)
// 获取标题 (通常是 <h1> 标签)
$title_node = $xpath->query('//h1')->item(0);
$post_title = $title_node ? $title_node->nodeValue : '无标题';
// 获取正文 (这里假设正文在 <article> 标签内)
// 你需要用浏览器的“检查元素”功能找到正确的选择器
$content_node = $xpath->query('//article')->item(0);
$post_content = $content_node ? $dom->saveHTML($content_node) : '无法提取内容。';
// 5. 准备文章数据
$post_data = array(
'post_title' => wp_strip_all_tags($post_title), // 清理 HTML 标签
'post_content' => $post_content,
'post_status' => 'publish', // 发布状态: publish, draft, pending
'post_author' => 1, // 作者 ID
'post_category' => array(8), // 分类 ID
'post_excerpt' => wp_trim_words($post_content, 55, '...'), // 自动生成摘要
);
// 6. 创建文章
$post_id = wp_insert_post($post_data);
if ($post_id > 0) {
error_log('成功创建文章,ID: ' . $post_id);
// 你可以在这里添加更多逻辑,比如抓取并设置特色图片
} else {
error_log('创建文章失败');
}
}
// --- 如何使用这个函数 ---
// 在主题的 functions.php 文件底部添加以下代码来测试:
// scrape_and_create_post('https://example.com/the-page-you-want-to-scrape');
如何使用代码方法:
- 通过 FTP 或主机控制面板访问你的 WordPress 安装目录。
- 导航到
/wp-content/themes/你的主题名称/。 - 找到
functions.php文件并下载备份。 - 在文件末尾
?>之前添加上面的代码。 - 修改代码中的
$url变量为你想要抓取的网址。 - 最重要的:修改
// 4. 提取数据部分的 CSS 选择器(如//h1,//article),使其与目标网页的 HTML 结构匹配,这是最需要耐心调试的一步。 - 保存文件并上传回服务器,访问你的网站一次,函数就会被触发。
总结与建议
| 特性 | 插件方法 | 代码方法 |
|---|---|---|
| 易用性 | 极高,图形化界面,无需编程知识 | 低,需要懂 PHP、HTML 和 CSS 选择器 |
| 灵活性 | 较高,但受限于插件功能 | 极高,可以完全自定义抓取逻辑 |
| 维护成本 | 低,插件作者会更新 |
