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

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓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';

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技术可以增加爬虫的稳定性和安全性,以应对目标网站的反爬策略。本文的代码仅供参考,你可以根据自己的需求和目标网站的特点进行修改和优化,以实现更高效和更强大的爬虫功能。希望本文对你的爬虫技术有所帮助,谢谢阅读。

相关文章
|
2月前
在线检测显示屏坏点html工具源码
在线检测显示屏坏点html工具源码
68 20
|
2月前
|
PHP 计算机视觉 UED
Buzz库:PHP图像处理中的异步图像下载和保存
Buzz库:PHP图像处理中的异步图像下载和保存
|
3月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
106 4
|
4月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
896 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
4月前
|
前端开发 JavaScript
pyquery:一个灵活方便的 HTML 解析库
pyquery:一个灵活方便的 HTML 解析库
43 1
|
5月前
|
前端开发
Twaver-HTML5基础学习(28)工具条(添加自定义按钮_自定义事件)
这篇文章介绍了如何在Twaver-HTML5中创建工具条,添加自定义按钮,并绑定自定义事件,包括放大、缩小、占满屏幕和重置画布大小的功能。
74 11
|
4月前
|
小程序 数据可视化 开发工具
HTML我帮您打造拖拽可视化的WEUI小程序工具
HTML我帮您打造拖拽可视化的WEUI小程序工具
63 0
|
4月前
|
Shell 网络安全 数据安全/隐私保护
suuk-s.php.jpg-python 库劫持
suuk-s.php.jpg-python 库劫持
40 0
|
5月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
6月前
在线将多张图片拼接起来图工具HTML源码
在线将多张图片拼接成一张图片,多图合一并导出下载。无需本地安装软件。 下载时,使用日期时间作为文件名,规避图片文件名相同造成的覆盖问题;也能省去一部覆盖确认操作 多语言支持
64 0
在线将多张图片拼接起来图工具HTML源码