Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP编写图书信息爬虫程序

PHP编写图书信息爬虫程序

原创
作者头像
华科云商小徐
发布于 2025-05-12 07:09:26
发布于 2025-05-12 07:09:26
5200
代码可运行
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫
运行总次数:0
代码可运行

最近闲来无事,有个朋友问我他在用PHP写一个抓取图书信息的爬虫程序出现了一些BUG,想要让我看下帮他修改,无奈写的语法太过复杂凌乱,索性我重头再来,直接用自己的方式写了一篇给他一些思路做参考。

以下是一个使用PHP编写的简单图书信息爬虫示例,使用 GuzzleHttp 发送HTTP请求和 Symfony DomCrawler 解析HTML内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
require 'vendor/autoload.php';
​
use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;// 创建HTTP客户端
$client = new Client([
    'headers' => [
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    ]
]);// 存储结果的CSV文件
$csvFile = fopen('books.csv', 'w');
fputcsv($csvFile, ['书名', '作者', '价格', '评分', '简介']);// 示例:爬取豆瓣读书的编程类书籍(实际使用时请遵守网站规则)
$baseUrl = 'https://book.douban.com/tag/编程?start=%d';for ($page = 0; $page < 3; $page += 20) { // 爬取3页
    try {
        $response = $client->get(sprintf($baseUrl, $page));
        $html = (string)$response->getBody();
        
        $crawler = new Crawler($html);
        
        // 提取图书信息
        $crawler->filter('li.subject-item')->each(function (Crawler $node) use ($csvFile) {
            $title = $node->filter('h2 a')->text();
            $info = $node->filter('.pub')->text();
            $rating = $node->filter('.rating_nums')->text('暂无评分');
            $desc = $node->filter('.info p')->text('暂无简介');
            
            // 清理数据
            $info = trim(str_replace(["\n", " "], "", $info));
            list($author, $publisher, $price) = explode('/', $info, 3) + ['', '', ''];fputcsv($csvFile, [
                trim($title),
                trim($author),
                trim($price),
                trim($rating),
                trim($desc)
            ]);
        });
        
        echo "已抓取第 ".($page/20+1)." 页数据\n";
        sleep(1); // 遵守爬虫道德,添加延迟} catch (Exception $e) {
        echo "抓取失败: ".$e->getMessage()."\n";
    }
}fclose($csvFile);
echo "数据已保存到 books.csv\n";

使用说明

  1. 安装依赖: composer require guzzlehttp/guzzle symfony/dom-crawler
  2. 注意事项
    • 需遵守目标网站的robots.txt规则
    • 添加适当的请求延迟(示例中为1秒)
    • 需要处理可能出现的反爬机制(验证码、IP封禁等)
    • 实际应用中建议使用代理IP池

核心功能说明

  1. HTTP请求
    • 使用Guzzle模拟浏览器请求
    • 添加User-Agent头避免被简单拦截
  2. 数据解析
    • 通过CSS选择器定位元素
    • 提取书名、作者、价格等信息
    • 处理可能缺失的数据字段
  3. 数据存储
    • 使用CSV格式存储结果
    • 包含字段:书名、作者、价格、评分、简介
  4. 分页处理
    • 通过URL参数控制分页
    • 示例抓取3页数据(可调整循环次数)

扩展建议

  1. 反爬应对
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 随机延迟
sleep(rand(1, 3));// 使用代理
$client = new Client([
    'proxy' => 'http://user:pass@proxy:port'
]);
  1. 数据库存储
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用PDO存储到MySQL
$pdo = new PDO('mysql:host=localhost;dbname=books', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO books (...) VALUES (...)");
$stmt->execute([...]);
  1. 异步请求
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用Guzzle的异步并发
$promises = [];
foreach ($urls as $url) {
    $promises[] = $client->getAsync($url);
}
$results = GuzzleHttp\Promise\unwrap($promises);

上面就是我所编写的全部过程,不过如果有更好的方案或者建议可以评论区留言讨论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用PHP的Guzzle库编写的图片爬虫程序
使用 PHP 的 Guzzle 库编写一个图片爬虫程序是一个非常常见的任务,Guzzle 是一个流行的 HTTP 请求库,允许你轻松地发送请求和处理响应。
华科云商小徐
2025/03/13
2770
使用网络爬虫自动抓取图书信息
网络爬虫是一种从互联网上进行开放数据采集的重要手段。本案例通过使用Python的相关模块,开发一个简单的爬虫。实现从某图书网站自动下载感兴趣的图书信息的功能。主要实现的功能包括单页面图书信息下载,图书信息抽取,多页面图书信息下载等。本案例适合大数据初学者了解并动手实现自己的网络爬虫。
数据科学人工智能
2022/03/31
2.7K0
使用网络爬虫自动抓取图书信息
使用Crawler实例进行网页内容抓取
网页内容抓取的背景 随着互联网的快速发展,网页上的信息量日益庞大。如何从海量的网页中快速、准确地抓取所需信息,成为了一个技术挑战。网页内容抓取技术通过自动化的方式,模拟用户浏览网页的过程,获取网页上的文本、图片、链接等信息。
小白学大数据
2024/09/25
4110
Symfony DomCrawler库在反爬虫应对中的应用
在当今信息爆炸的时代,互联网上的数据量巨大,但这也带来了一些问题,比如恶意爬虫可能会对网站造成严重的影响,导致资源浪费和服务不稳定。为了解决这个问题,许多网站采取了反爬虫策略。Symfony DomCrawler库是一个强大的工具,可以帮助我们在反爬虫应对中起到重要的作用。
小白学大数据
2024/05/11
3880
Symfony DomCrawler 库爬取图片实例
在当今互联网时代,网络爬虫技术已经成为信息获取和数据分析的重要工具之一。本文将详细介绍如何利用Symfony DomCrawler库,结合代理设置和HTML内容解析,实现对搜狐网站图片的爬取,并展示实际代码和效果。
小白学大数据
2023/12/12
3190
爬虫入门经典(二十四) | 爬取当当网图书信息并进行数据清洗
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥
不温卜火
2020/12/03
4.7K1
爬虫入门经典(二十四) | 爬取当当网图书信息并进行数据清洗
豆瓣图书评分数据的可视化分析
豆瓣是一个提供图书、电影、音乐等文化产品的社区平台,用户可以在上面发表自己的评价和评论,形成一个丰富的文化数据库。本文将介绍如何使用爬虫技术获取豆瓣图书的评分数据,并进行可视化分析,探索不同类型、不同年代、不同地区的图书的评分特征和规律。
jackcode
2023/09/12
6180
豆瓣图书评分数据的可视化分析
第一个爬虫——豆瓣新书信息爬取
本文记录了我学习的第一个爬虫程序的过程。根据《Python数据分析入门》一书中的提示和代码,对自己的知识进行查漏补缺。
py3study
2020/01/16
8350
爬虫 | 百行代码爬取14.5W条豆瓣图书信息
点击任意标签,分析页面请求 分别请求不同的标签页面,分析请求链接,可以发现如下规律:
咸鱼学Python
2019/10/09
5360
爬虫 | 百行代码爬取14.5W条豆瓣图书信息
Python爬虫学习 爬取 “得到” App 电子书信息
“得到” App 是罗辑思维出品的一款碎片时间学习的 App,其官方网站为 https://www.igetget.com,App 内有很多学习资源。不过 “得到” App 没有对应的网页版,所以信息必须要通过 App 才可以获取。这次我们通过抓取其 App 来练习 mitmdump 的用法。
python学习教程
2020/07/02
1.7K0
使用Panther进行爬虫时,如何优雅地处理登录和Cookies?
前言 在互联网数据采集领域,网络爬虫扮演着至关重要的角色。它们能够自动化地从网站获取数据,为数据分析、内容聚合、市场研究等提供原材料。然而,许多网站通过登录和Cookies机制来保护其数据,这为爬虫开发者提出了新的挑战。Symfony Panther作为一个现代的网页爬虫和浏览器自动化工具,提供了一套优雅的方法来处理登录和Cookies。本文将详细介绍如何使用Panther进行爬虫时,优雅地处理登录和Cookies。
小白学大数据
2024/10/22
2350
Java爬虫入门实战:爬取京东图书信息
写网络爬虫,一个要有一个逻辑顺序。本文主要讲解我自己经常使用的一个顺序,并且本人经常使用这个框架来写一些简单的爬虫,复杂的爬虫,也是在这个基础上添加其他程序。
Java团长
2018/08/16
1.2K0
Java爬虫入门实战:爬取京东图书信息
【python实操】年轻人,想会写抢购脚本和爬虫?试试多线程吧(附爬虫完整源代码)
Python 多线程(multi-threading)是一种利用多个线程同时执行任务的技术,它旨在提高程序的运行效率和性能。
20岁爱吃必胜客
2023/03/27
1.2K0
【python实操】年轻人,想会写抢购脚本和爬虫?试试多线程吧(附爬虫完整源代码)
躁动不安的年代,你需要读几本好书(python爬虫及数据分析)
当今社会,速度已经深入人心了,“快”成了大家默认的办事境界,看机器上一件件飞一般传递着的产品,听办公室一族打电话时那种无人能及的语速......休闲的概念已日渐模糊,大家似乎都变成了在“快咒”控制下的小人儿,似乎连腾出点时间来松口气的时间都没有了,看得见的、看不见的规则约束着我们;有形的、无形的的鞭子驱赶着我们,我们马不停蹄追求事业、爱情、地位、财富,似乎自己慢一拍,就会被这个世界抛弃
南山烟雨
2019/05/10
6720
躁动不安的年代,你需要读几本好书(python爬虫及数据分析)
数据分析实战:从0到1完成数据获取分析到可视化
数据采集顾名思义就是获取数据源的各类数据,它在数据分析和处理中扮演着至关重要的角色。
不吃西红柿
2024/05/28
1.4K0
数据分析实战:从0到1完成数据获取分析到可视化
小程序(2):云开发
所谓serverless就是无后台开发。通俗地说就是踢开后端闹革命。只需要一个前端就可以操作数据库小程序云开发就是这个概念的尝鲜者。云开发也是小程序近年最大的改变之一。
一粒小麦
2019/08/22
3.4K0
【Python爬虫】听说你又闹书荒了?豆瓣读书9.0分书籍陪你过五一
五一将至,又到了学习的季节。目前流行的各大书单主打的都是豆瓣8.0评分书籍,却很少有人来聊聊这9.0评分的书籍长什么样子。刚好最近学了学python爬虫,那就拿豆瓣读书来练练手。
弗兰克的猫
2019/05/25
5130
基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】
1.实现语言:JAVA语言。 2.环境要求:MyEclipse/Eclipse + Tomcat + MySql。 3.使用技术:SpringMVC + Spring + Mybatis。
全栈程序员站长
2022/09/06
7840
一起来豆瓣看书吧!
豆瓣的图书的书一直是比较全的,最近有的小伙伴想去豆瓣看看IT有关的书籍,说走就走,豆瓣我来了!
我被狗咬了
2019/09/23
4210
一起来豆瓣看书吧!
python电商数据爬虫代码示例
电商网站通常有反爬机制,比如频率限制、验证码等,所以代码中可能需要加入一些应对措施,比如设置请求头、使用代理、延迟请求等。
华科云商小徐
2025/05/07
2100
相关推荐
用PHP的Guzzle库编写的图片爬虫程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验