商城首页欢迎来到中国正版软件门户

您的位置:首页 > 编程开发 >使用正则表达式的实战案例:PHP爬虫抓取电商数据

使用正则表达式的实战案例:PHP爬虫抓取电商数据

  发布于2024-11-15 阅读(0)

扫一扫,手机访问

随着电商行业的快速发展,各类商品数据也变得越来越重要。作为数据分析人员,获取电商数据是日常工作中不可或缺的一部分。而使用爬虫技术获取数据,可以大幅减轻分析工作的难度。本篇文章将介绍如何使用 PHP 爬虫抓取电商数据,并通过正则表达式进行数据分析。

1.准备工作

在开始编写爬虫之前,需要准备好以下工具:

  • PHP:本次实战使用 PHP 作为开发语言。
  • cURL:用于向电商网站发送 HTTP 请求,并获取网页内容。
  • 正则表达式:用于从网页内容中提取所需的数据。
  • 文本编辑器:本文使用 VS Code。

2.爬取电商数据

要通过爬虫获取数据,首先需要选定一个目标网站。本文以京东商城为例,获取其商品列表页上的数据。

京东商品列表页的地址为:https://list.jd.com/list.html?cat=9987,653,655&page=1。其中,cat 参数代表商品分类,page 参数代表页码。可以通过更改这两个参数来获取不同分类、不同页数的商品数据。

具体来讲,可以使用以下代码发送 HTTP 请求,获取京东商品列表页的 HTML 代码。

$url = "https://list.jd.com/list.html?cat=9987,653,655&page=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

其中,curl_setopt 函数用于设置 cURL 参数。这里设置了 URL 和 RETURNTRANSFER 两个参数:URL 参数代表要访问的网页地址,RETURNTRANSFER 参数表示返回请求结果而不是布尔值。

通过上述代码,可以获取京东商品列表页的 HTML 代码。接下来,需要从中提取所需要的数据。

3.使用正则表达式提取数据

京东商品列表页的 HTML 代码中,每个商品的信息都包裹在一个 class 属性为 "gl-item" 的 div 标签内。因此,可以使用以下正则表达式匹配所有商品的 div 标签。

preg_match_all('/<div class="gl-item".*?</div>/s', $html, $matches);
$items = $matches[0];

其中,preg_match_all 函数用于匹配所有满足条件的字符串。第一个参数为正则表达式,第二个参数为要匹配的字符串,第三个参数为匹配结果。这里,$items 变量存储了所有商品 div 标签的字符串。

接下来,需要从 $items 数组中进一步提取所需的数据。以商品名称和价格为例,其正则表达式分别为:

$name_reg = '/<div class="p-name".*?<a.*?>(.*?)</a>/s';
$price_reg = '/<div class="p-price".*?<i>(.*?)</i>/s';

匹配商品名称时,首先匹配 div 标签的 class 属性为 "p-name" 的 div 标签,并在其中匹配包含商品名称的 a 标签。匹配商品价格时,同样匹配 div 标签的 class 属性为 "p-price" 的 div 标签,并在其中匹配包含价格的 i 标签。

于是,可以使用以下代码从 $items 数组中提取出所有商品的名称和价格。

$names = array();
$prices = array();
foreach ($items as $item) {
  preg_match($name_reg, $item, $matches);
  $names[] = $matches[1];

  preg_match($price_reg, $item, $matches);
  $prices[] = $matches[1];
}

在上述代码中,使用了 preg_match 函数匹配单个字符串。其中,第一个参数为正则表达式,第二个参数为要匹配的字符串,第三个参数为匹配结果。$names 和 $prices 变量分别存储所有商品的名称和价格。

经过以上步骤的处理,可以得到所有商品的名称和价格数据。但是,由于 HTML 代码中的各种标签和格式,获得的数据并不能直接用于分析。为了更好地分析和使用该数据,需要进行数据清洗。

4.数据清洗与分析

在进行数据清洗时,可以使用 PHP 的字符串处理函数清除无用的字符、非数字字符等。以下代码分别对商品名称和价格进行处理。

for ($i = 0; $i < count($names); $i++) {
  // 去除标签
  $names[$i] = strip_tags($names[$i]);
  // 去除空格及换行符
  $names[$i] = preg_replace('/s+/', '', $names[$i]);

  // 去除除数字和小数点外的字符
  $prices[$i] = preg_replace('/[^0-9.]/', '', $prices[$i]);
}

其中 strip_tags 函数用于去除字符串内的 HTML 标签,preg_replace 函数用于去除非数字和小数点的字符。

经过以上处理后,可以得到最终的商品名称和价格数据。在实际分析中,可以使用 Pandas 库载入数据,并进行统计分析、可视化等操作。

5.总结

通过本篇文章的介绍,读者可以了解到如何使用 PHP 爬虫获取电商数据,如何使用正则表达式解析 HTML 代码,并进行数据清洗和分析。这些技能对于数据分析人员而言,非常重要,希望读者可以通过实际操作进一步学习和掌握。

热门关注