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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文将介绍如何使用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';
AI 代码解读

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';
AI 代码解读

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);
AI 代码解读

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;
}
AI 代码解读

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文件
AI 代码解读

结语

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

目录
打赏
0
0
1
0
216
分享
相关文章
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
7月前
在线检测显示屏坏点html工具源码
在线检测显示屏坏点html工具源码
139 20
|
3月前
|
PHP
基于PHP开发的资源库系统源码
基于PHP开发的资源库系统源码
88 13
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
Vue 3 中如何通过状态管理库来更新虚拟 DOM?
148 57
PHP-Raylib 视 频 游 戏 编 程 库
php-raylib 是基于 PHP-FFI 绑定的 raylib-v5.5 游戏开发库,让 PHP 开发者轻松实现视频游戏编程。相比仅支持 4.+ 版本的原库,本项目适配最新 5.5 版本,并提供友好文档与示例代码(如窗口初始化、文本绘制等)。支持 PHP 7.4+ 和多平台(Windows、Linux、macOS),可通过 Composer 快速安装。欢迎贡献和完善![查看文档](http://raylib.kllxs.top/) 或访问仓库(GitHub/Gitee/Gitcode)。
PHP-Raylib 视 频 游 戏 编 程 库
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
4月前
|
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等