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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文将介绍如何使用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技术可以增加爬虫的稳定性和安全性,以应对目标网站的反爬策略。本文的代码仅供参考,你可以根据自己的需求和目标网站的特点进行修改和优化,以实现更高效和更强大的爬虫功能。希望本文对你的爬虫技术有所帮助,谢谢阅读。

相关文章
|
5天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
6天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
5月前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
79 1
|
5月前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
7天前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
2月前
|
PHP 开发者 UED
PHP中的异常处理:从基础到高级探索Python中的列表推导式:简洁而强大的工具
【8月更文挑战第30天】在PHP编程的世界中,异常处理是确保代码健壮性和可靠性的关键机制。本文将引导您了解PHP异常处理的基本概念,并通过实际示例展示如何有效地捕获和处理异常。我们将一起探索try-catch结构、自定义异常类以及高级异常处理技术,让您的PHP代码更加稳固和易于维护。
|
2月前
|
数据采集 JavaScript 数据挖掘
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
本文介绍了使用PHP Simple HTML DOM Parser进行网页数据抓取的方法,尤其适用于从懂车帝二手车网站提取汽车品牌、价格和里程等关键信息。首先,安装并配置所需库,使用代理IP和设置cookie与useragent来模拟用户行为,避免被封。然后,通过编写PHP脚本,利用cURL获取网页内容,解析HTML并提取所需数据,最终将数据保存至CSV文件。文章强调了正确配置代理和用户代理的重要性,并提供了完整的PHP代码示例,以帮助读者理解和应用网页抓取技术。
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
|
3月前
|
数据采集 缓存 自然语言处理
PHP将HTML标签转化为图片
通过这个方法,PHP后端能够实现将HTML内容转化为图片的功能。这种方式虽然牵涉到一些额外的安装和配置,但能够相对灵活且稳定地解冀转换需求,适用于需要在后端动态生成图片的场景。
74 1
|
3月前
|
数据采集 大数据 关系型数据库
如何使用 PHP 爬虫爬取大数据
**摘要:** 本文探讨了如何使用PHP爬虫处理大数据。从爬虫基本概念出发,讨论了PHP爬虫框架如Goutte和PHP-Crawler。在爬取大数据时,需明确目标网站、数据类型和量,编写爬虫程序,包括数据提取、反爬策略如设置User-Agent和访问频率控制。同时,采用并发处理(多线程)和分布式爬虫策略提升效率。最后,强调了合法合规使用爬虫技术的重要性。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之代码域如何管理上传的PHP和HTML代码
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
下一篇
无影云桌面