巧用简单工具:PHP使用simple_html_dom库助你轻松爬取JD.com

简介: 本文将介绍如何使用PHP语言和一个简单的第三方库simple_html_dom来爬取JD.com的商品信息。simple_html_dom是一个轻量级的HTML解析器,它可以方便地从HTML文档中提取元素和属性,而无需使用正则表达式或DOM操作。本文将通过一个实例来展示如何使用simple_html_dom库来爬取JD.com的商品名称、价格、评分和评论数,并将结果保存到CSV文件中。本文还将介绍如何使用代理IP技术来避免被目标网站封禁或限制。

亿牛云代理

概述

爬虫技术是一种从网页上自动提取数据的方法,它可以用于各种目的,比如数据分析、网站监控、竞争情报等。爬虫技术的难度和复杂度取决于目标网站的结构和反爬策略,有些网站可能需要使用复杂的工具和技巧才能成功爬取,而有些网站则相对简单,只需要使用一些基本的工具和库就可以实现。

本文将介绍如何使用PHP语言和一个简单的第三方库simple_html_dom来爬取JD.com的商品信息。simple_html_dom是一个轻量级的HTML解析器,它可以方便地从HTML文档中提取元素和属性,而无需使用正则表达式或DOM操作。本文将通过一个实例来展示如何使用simple_html_dom库来爬取JD.com的商品名称、价格、评分和评论数,并将结果保存到CSV文件中。本文还将介绍如何使用代理IP技术来避免被目标网站封禁或限制。

正文

1. 安装和引入simple_html_dom库

要使用simple_html_dom库,首先需要下载它的源码文件,可以从[这里]获取。下载后,将simple_html_dom.php文件放到你的项目目录下,然后在你的PHP代码中引入它,如下所示:

<?php
// 引入simple_html_dom库
require_once 'simple_html_dom.php';

2. 定义目标URL和代理IP

接下来,我们需要定义我们要爬取的目标URL和代理IP。在本例中,我们将爬取JD.com的手机分类下的第一页的商品信息。我们还需要使用代理IP来伪装我们的请求,以防止被目标网站识别和封禁。我们可以从爬虫代理获取高质量的代理IP,它提供了多种类型和地区的代理IP,以及不同的认证方式。在本例中,我们将使用HTTP协议的爬虫加强版代理,其域名为proxy.16yun.cn,端口为8080,用户名和密码为你在爬虫代理注册后获得的。我们将这些信息定义为变量,如下所示:

<?php
// 定义目标URL
$url = 'https://list.jd.com/list.html?cat=9987,653,655';

// 亿牛云 爬虫加强版代理 定义代理IP的域名、端口、用户名和密码
$proxy_host = 'proxy.yiniuyun.com';
$proxy_port = '8080';
$proxy_user = '16YUN';
$proxy_pass = '16IP';

3. 发送请求和获取响应

然后,我们需要使用PHP的curl扩展来发送请求和获取响应。curl是一个强大的网络传输工具,它支持多种协议和选项,可以用于模拟浏览器的行为。我们需要设置一些curl的选项,比如设置代理IP、设置超时时间、设置用户代理等,以保证请求的成功和安全。我们还需要使用simple_html_dom的函数file_get_html来将响应的内容转换为一个simple_html_dom对象,以便后续的解析。我们的代码如下:

<?php
// 初始化curl
$ch = curl_init();

// 设置curl的选项
curl_setopt($ch, CURLOPT_URL, $url); // 设置目标URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回结果而不是直接输出
curl_setopt($ch, CURLOPT_PROXY, $proxy_host); // 设置代理IP的域名
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port); // 设置代理IP的端口
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_user . ':' . $proxy_pass); // 设置代理IP的用户名和密码
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置超时时间为10秒
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'); // 设置用户代理为Chrome浏览器

// 发送请求并获取响应
$response = curl_exec($ch);

// 关闭curl
curl_close($ch);

// 将响应的内容转换为一个simple_html_dom对象
$html = file_get_html($response);

4. 解析和提取数据

接下来,我们需要使用simple_html_dom的方法来解析和提取数据。simple_html_dom提供了多种方法来查找和操作HTML元素,比如find、children、first_child、last_child、next_sibling、prev_sibling、parent、innertext、outertext、plaintext、attr等。我们可以使用这些方法来根据HTML元素的标签、类名、ID、属性等来定位和获取我们需要的数据。在本例中,我们需要提取商品的名称、价格、评分和评论数,它们分别对应于HTML元素的以下特征:

  • 商品名称:class为p-name的div元素的第一个子元素的title属性
  • 商品价格:class为p-price的div元素的第一个子元素的innertext
  • 商品评分:class为p-commit的div元素的第一个子元素的第一个子元素的innertext
  • 商品评论数:class为p-commit的div元素的第一个子元素的第二个子元素的innertext

我们可以使用simple_html_dom的find方法来查找所有符合条件的元素,然后遍历它们,使用其他方法来获取它们的数据,并将数据保存到一个数组中。我们的代码如下:

<?php
// 定义一个空数组来存储数据
$data = array();

// 查找所有class为gl-item的li元素,它们是商品的容器
$items = $html->find('li.gl-item');

// 遍历每个商品
foreach ($items as $item) {
   
   
    // 定义一个空数组来存储单个商品的数据
    $row = array();

    // 查找商品名称,并将其保存到$row数组中
    $name = $item->find('div.p-name', 0)->first_child()->attr['title'];
    $row['name'] = $name;

    // 查找商品价格,并将其保存到$row数组中
    $price = $item->find('div.p-price', 0)->first_child()->innertext;
    $row['price'] = $price;

    // 查找商品评分,并将其保存到$row数组中
    $rating = $item->find('div.p-commit', 0)->first_child()->first_child()->innertext;
    $row['rating'] = $rating;

    // 查找商品评论数,并将其保存到$row数组中
    $comment = $item->find('div.p-commit', 0)->first_child()->last_child()->innertext;
    $row['comment'] = $comment;

    // 将$row数组添加到$data数组中
    $data[] = $row;
}

5. 保存和输出数据

最后,我们需要将提取的数据保存到CSV文件中,并输出到屏幕上。我们可以使用PHP的fopen、fputcsv、fclose等函数来操作文件,以及print_r函数来打印数组。我们的代码如下:

<?php
// 定义CSV文件的名称
$filename = 'jd.csv';

// 打开CSV文件,如果不存在则创建
$file = fopen($filename, 'w');

// 遍历$data数组
foreach ($data as $row) {
   
   
    // 将每行数据写入CSV文件
    fputcsv($file, $row);
}

// 关闭CSV文件

结语

本文介绍了如何使用PHP语言和一个简单的第三方库simple_html_dom来爬取JD.com的商品信息,并将结果保存到CSV文件中。本文还介绍了如何使用代理IP技术来避免被目标网站封禁或限制。通过本文的实例,我们可以看到,使用simple_html_dom库可以方便地从HTML文档中提取元素和属性,而无需使用正则表达式或DOM操作。使用代理IP技术可以增加爬虫的稳定性和安全性,以应对目标网站的反爬策略。本文的代码仅供参考,你可以根据自己的需求和目标网站的特点进行修改和优化,以实现更高效和更强大的爬虫功能。希望本文对你的爬虫技术有所帮助,谢谢阅读。

相关文章
|
4月前
|
JavaScript 前端开发 API
PHP 发展简史:从个人工具到互联网基石
PHP 起源于 1994 年,由 Rasmus Lerdorf 为简化网页开发而创建,后逐步演变为功能强大的编程语言。从最初的个人工具到支撑全球 77.4% 的服务器端脚本市场,PHP 凭借易用性、稳定性和广泛的生态支持,在 Web 开发领域占据重要地位。经历 PHP 6 的挫折后,PHP 7 实现性能飞跃,如今已更新至 PHP 8.2,持续为 WordPress、Facebook、Wikipedia 等大型项目提供动力。PHP 的发展历程,不仅是一部技术演进史,更映射了互联网时代的变迁。
260 8
|
3月前
|
NoSQL API PHP
PHP-Casbin:一个让开发者不再为权限控制 “重复造轮子” 的工具
PHP-Casbin 是一个轻量、灵活的开源权限框架,支持 ACL、RBAC、ABAC 等多种模型,帮助 PHP 开发者高效解决权限控制难题。它具备跨框架、跨语言、动态权限、多租户隔离等能力,适用于电商、SaaS、政企系统等复杂场景,让开发者摆脱重复造轮子,提升项目安全与可维护性。
205 0
|
6月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
2月前
|
存储 监控 算法
基于 PHP 布隆过滤器的局域网监控管理工具异常行为检测算法研究
布隆过滤器以其高效的空间利用率和毫秒级查询性能,为局域网监控管理工具提供轻量化异常设备检测方案。相比传统数据库,显著降低延迟与资源消耗,适配边缘设备部署需求,提升网络安全实时防护能力。(238字)
163 0
|
5月前
|
JavaScript Linux PHP
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
201 3
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
|
12月前
在线检测显示屏坏点html工具源码
在线检测显示屏坏点html工具源码
234 20
|
6月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
6月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
9月前
|
资源调度 JavaScript
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
282 57
|
8月前
|
PHP
基于PHP开发的资源库系统源码
基于PHP开发的资源库系统源码
193 13

热门文章

最新文章