您的位置:首页 > 文旅 > 旅游 > 爬虫实战:使用PHP爬取携程旅游信息

爬虫实战:使用PHP爬取携程旅游信息

2024/12/23 15:56:32 来源:https://blog.csdn.net/wx_19970108018/article/details/140046325  浏览:    关键词:爬虫实战:使用PHP爬取携程旅游信息

随着旅游业的不断发展,旅游信息变得非常丰富。为了方便大家获取更全面、准确的旅游信息,我们可以使用爬虫来抓取旅游网站上的数据,并进行分析和处理。本文将介绍如何使用php爬取携程旅游信息。

  1. 爬虫基础知识

爬虫是一种自动化程序,可以模拟用户访问网站并获取网站上的数据。爬虫一般分为以下几步:

  1. 发起请求:爬虫程序会向目标网站发起HTTP请求,获取目标网站的HTML代码。
  2. 解析HTML:使用适当的解析器对HTML代码进行解析,并获取需要的数据。常见的解析器有正则表达式、XPath和DOM解析器等。
  3. 存储数据:将获取到的数据存储到文件或数据库中,以便后续分析和处理。
  4. 目标网站分析

在编写爬虫之前,首先需要分析目标网站的结构和数据。本次爬虫的目标网站是携程旅游网站。我们需要分析该网站的URL结构和HTML代码,以确定请求方式和解析方式。

2.1 URL结构分析

携程旅游网站的URL结构比较简单,每个旅游产品都有一个唯一的ID号。以浏览北京旅游为例,其URL为:https://you.ctrip.com/sight/beijing1.html。其中,beijing1表示北京旅游的ID号。

立即学习“PHP免费学习笔记(深入)”;

2.2 HTML代码分析

使用Chrome浏览器的开发者工具查看该网页的HTML代码,可以发现页面上的旅游信息都在一个class为“list_mod2”的div中。该div中包含了每个旅游产品的详细信息,包括产品名称、价格、评价等。在爬虫程序中,我们需要使用PHP的DOM解析器来解析这些信息。

  1. 爬虫程序编写

现在我们已经了解了目标网站的URL结构和HTML代码,可以编写爬虫程序来获取旅游信息。

3.1 发起HTTP请求

首先,我们需要使用PHP的cURL库来向目标网站发起HTTP请求,获取目标网站的HTML代码。在代码中,我们使用了一个循环,从ID=1开始,依次获取各个旅游产品的详细信息。

1

2

3

4

5

6

7

8

9

//爬取ID号从1到n的旅游产品的详细信息

for($i=1;$i<=$n;$i++){

    $url = "https://you.ctrip.com/sight/beijing$i.html"; //目标网站URL

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $html = curl_exec($ch);

    curl_close($ch);

    }

3.2 解析HTML代码

接下来,我们使用PHP的DOM解析器来解析目标网站的HTML代码,并获取我们需要的旅游产品信息。在代码中,我们使用了XPath表达式来选择class为“list_mod2”的div,并获取其中的产品名称、价格、评价等信息。

1

2

3

4

5

6

7

8

9

10

11

12

$doc = new DOMDocument();

$doc->loadHTML($html);

$xpath = new DOMXPath($doc);

$list_mod2 = $xpath->query('//*[@class="list_mod2"]'); //选择class"list_mod2"的div

foreach($list_mod2 as $mod){

    $modImg = $xpath->query('a/img/@src', $mod)->item(0)->nodeValue; //获取产品图片URL

    $modTitle = $xpath->query('div/h2/a', $mod)->item(0)->nodeValue; //获取产品名称

    $modContent = $xpath->query('div/div/div/p/@title', $mod)->item(0)->nodeValue; //获取产品简介

    $modPrice = $xpath->query('div/div/span/em', $mod)->item(0)->nodeValue; //获取产品价格

    $modComment = $xpath->query('div/div/div/div/span[1]', $mod)->item(0)->nodeValue; //获取产品评价分数

    $modCommentNum = $xpath->query('div/div/div/div/span[2]', $mod)->item(0)->nodeValue; //获取产品评价人数

}

3.3 存储数据

最后,我们将获取到的旅游产品信息存储到数据库中。在代码中,我们使用了PHP的PDO扩展来连接数据库,并将获取到的产品信息插入到名为“product_info”的数据库表中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

//连接数据库

$dsn = 'mysql:host=localhost;port=3306;dbname=test;charset=utf8';

$username = 'root';

$password = '123456';

$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

$dbh = new PDO($dsn, $username, $password, $options);

//将获取到的产品信息插入到数据库

$stmt = $dbh->prepare("INSERT INTO product_info(img_url, title, content, price, comment_score, comment_num) VALUES(?, ?, ?, ?, ?, ?)");

$stmt->bindParam(1, $modImg);

$stmt->bindParam(2, $modTitle);

$stmt->bindParam(3, $modContent);

$stmt->bindParam(4, $modPrice);

$stmt->bindParam(5, $modComment);

$stmt->bindParam(6, $modCommentNum);

$stmt->execute();

  1. 总结

使用PHP编写爬虫程序,可以轻松地抓取携程旅游网站的旅游产品信息,并将其存储到数据库中。在实际开发中,我们还可以使用多线程、IP代理等技术来提高爬虫程序的效率和稳定性。然而,需要注意的是,在使用爬虫程序的过程中,应当尊重目标网站的版权和隐私政策,避免侵权和滥用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com