您的当前位置:首页>全部文章>文章详情

【PHP】PHP新潮流:教你如何用Symfony Panther库构建强大的爬虫,顺利获取TikTok网站的数据

CrazyPanda发表于:2024-01-04 23:07:40浏览:326次TAG:

引入

你是否想过用PHP来编写爬虫,从网上抓取你感兴趣的数据?你是否觉得PHP的爬虫库太少,功能太弱,无法满足你的需求?你是否曾经遇到过动态网页,需要模拟浏览器的行为,才能获取到你想要的数据?

如果你的答案是肯定的,那么你一定要了解一下Symfony Panther这个PHP库。Symfony Panther是一个基于Symfony框架的爬虫库,它可以让你用PHP轻松地创建和运行强大的爬虫,甚至可以处理复杂的动态网页,比如TikTok这样的热门社交媒体网站。

在这篇文章中,我将向你介绍Symfony Panther的基本原理和特点,以及如何用它来构建一个简单的爬虫,从TikTok网站上抓取视频的信息和链接。我还会给你展示如何用代理IP技术,来避免被TikTok的反爬虫机制识别和封锁。

如果你对PHP和爬虫技术感兴趣,那就跟我一起来学习吧!

背景介绍

爬虫,也叫网络爬虫或网页抓取,是一种自动化地从互联网上获取数据的技术。爬虫通常会模拟用户的请求,访问目标网站的网页,然后从网页的源代码中提取出所需的数据,保存到本地或数据库中。

PHP是一种广泛使用的服务器端脚本语言,它主要用于开发动态网页和网站。PHP有很多优点,比如简单易学,跨平台,高效,灵活,丰富的扩展库等。PHP也可以用来编写爬虫,但是PHP的爬虫库相对较少,功能也不够强大,很难处理一些复杂的动态网页。

动态网页是指那些不是一次性生成的,而是根据用户的交互,或者后台的数据变化,动态地更新内容的网页。动态网页通常会使用JavaScript,Ajax,Websocket等技术,来实现网页的动态效果。动态网页的优点是可以提高用户的体验,增加网页的互动性,但是对于爬虫来说,就是一个挑战。

因为动态网页的内容不是一开始就完整地存在于网页的源代码中,而是需要执行JavaScript,或者发送额外的请求,才能生成和显示。这就导致了传统的爬虫库,比如PHP的Guzzle,Curl,DomCrawler等,无法直接获取到动态网页的完整内容,需要额外的处理,比如使用正则表达式,XPath,CSS选择器等,来解析网页的源代码,或者使用第三方的工具,比如PhantomJS,Selenium等,来模拟浏览器的行为,执行JavaScript,渲染网页,才能获取到所需的数据。这些处理方式都会增加爬虫的复杂度,降低爬虫的效率,甚至有可能导致爬虫的失败。

问题陈述

TikTok是一个非常流行的短视频社交媒体网站,它拥有数亿的用户,每天产生海量的视频内容。TikTok的网页版是一个典型的动态网页,它的视频列表和视频详情都是通过JavaScript和Ajax动态生成和加载的,而且还有一些反爬虫的机制,比如验证码,Cookie,User-Agent等,来防止爬虫的访问。

如果我们想要用PHP来编写一个爬虫,从TikTok网站上抓取视频的信息和链接,我们就会面临以下的问题:

  • 如何用PHP发送请求,访问TikTok的网页,获取网页的源代码?

  • 如何用PHP解析网页的源代码,提取出视频的信息和链接?

  • 如何用PHP模拟浏览器的行为,执行JavaScript,渲染网页,获取动态生成的内容?

  • 如何用PHP处理TikTok的反爬虫机制,避免被识别和封锁?

论证或解决方案

为了解决上述的问题,我们可以使用Symfony Panther这个PHP库,来构建一个强大的爬虫,顺利获取TikTok网站的数据。

Symfony Panther是一个基于Symfony框架的爬虫库,它可以让你用PHP轻松地创建和运行强大的爬虫,甚至可以处理复杂的动态网页。Symfony Panther的主要特点有:

  • 它使用了ChromeDriver或FirefoxDriver,来驱动真实的浏览器,执行JavaScript,渲染网页,获取动态生成的内容,无需使用第三方的工具,比如PhantomJS,Selenium等。

  • 它提供了一个简洁的API,让你可以用PHP直接操作浏览器,比如打开网页,点击链接,填写表单,截屏,下载文件等,无需学习复杂的语法,比如XPath,CSS选择器等。

  • 它集成了Symfony的DomCrawler和BrowserKit组件,让你可以用PHP轻松地解析网页的源代码,提取出所需的数据,无需使用正则表达式等。

  • 它支持使用代理IP,Cookie,User-Agent等,来处理网站的反爬虫机制,避免被识别和封锁。

要使用Symfony Panther,你需要先安装PHP和Composer,然后在你的项目目录下,运行以下的命令,来安装Symfony Panther的依赖库:

// 在你的项目目录下,运行以下的命令,来安装Symfony Panther的依赖库
composer require symfony/panther

然后,你需要下载ChromeDriver或FirefoxDriver,根据你的操作系统和浏览器的版本,选择合适的驱动程序,放到你的项目目录下,或者添加到你的系统路径中。

接下来,你就可以开始编写你的爬虫代码了。下面是一个简单的示例,展示了如何用Symfony Panther来构建一个爬虫,从TikTok网站上抓取视频的信息和链接:

<?php
// 引入Symfony Panther的自动加载文件
require __DIR__.'/vendor/autoload.php';

// 引入Symfony Panther的命名空间
use Symfony\Component\Panther\Client;

// 创建一个Symfony Panther的客户端对象,指定使用ChromeDriver
$client = Client::createChromeClient();

// 设置代理
// 这里我们使用了亿牛云爬虫代理的域名、端口、用户名、密码,你可以根据业务需要选择不同的爬虫代理产品,修改相应的参数
$client->request('GET', 'http://httpbin.org/ip', [
    'proxy' => [
        'http' => 'http://16YUN:16IP@www.16yun.cn:3100',
        'https' => 'http://16YUN:16IP@www.16yun.cn:3100',
    ],
]);

// 设置Cookie
// 这里我们使用了一个有效的Cookie,你可以从你自己的浏览器中获取,或者用Symfony Panther自动获取
$client->setCookie('tt_webid', '1234567890');

// 设置User-Agent
// 这里我们使用了一个常见的User-Agent,你可以根据你自己的需求,修改为其他的User-Agent
$client->setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36');

// 打开TikTok的网页版首页
$crawler = $client->request('GET', 'https://www.tiktok.com/');

// 等待网页加载完成,直到出现视频列表的元素
$client->waitFor('.video-feed-item');

// 获取视频列表的元素
$videos = $crawler->filter('.video-feed-item');

// 遍历视频列表的元素,提取每个视频的信息和链接
foreach ($videos as $video) {
    // 创建一个新的爬虫对象,用于操作视频元素
    $video_crawler = new Crawler($video);

    // 获取视频的标题
    $title = $video_crawler->filter('.video-infos-container .video-meta .video-meta-title')->text();

    // 获取视频的作者
    $author = $video_crawler->filter('.video-infos-container .video-meta .author-uniqueId')->text();

    // 获取视频的播放量
    $play_count = $video_crawler->filter('.video-infos-container .video-meta .play-count')->text();

    // 获取视频的点赞数
    $like_count = $video_crawler->filter('.video-infos-container .video-meta .like-num')->text();

    // 获取视频的评论数
    $comment_count = $video_crawler->filter('.video-infos-container .video-meta .comment-num')->text();

    // 获取视频的分享数
    $share_count = $video_crawler->filter('.video-infos-container .video-meta .share-num')->text();

    // 获取视频的链接
    $link = $video_crawler->filter('.video-card-mask')->link()->getUri();

    // 输出视频的信息和链接
    echo "标题:$title\n";
    echo "作者:$author\n";
    echo "播放量:$play_count\n";
    echo "点赞数:$like_count\n";
    echo "评论数:$comment_count\n";
    echo "分享数:$share_count\n";
    echo "链接:$link\n";
    echo "------------------------\n";
}

// 关闭客户端对象,释放资源
$client->quit();

案例分析或实例

为了验证我们的爬虫代码是否有效,我们可以运行以下的命令,来执行我们的爬虫代码:

// 在你的项目目录下,运行以下的命令,来执行你的爬虫代码
php tiktok.php

如果一切顺利,我们就可以看到类似以下的输出:

标题:#duet with @jasonderulo 你们喜欢这样的duet吗?
作者:@tiktok
播放量:1.1M
点赞数:8.9K
评论数:1.2K
分享数:1.1K
链接:https://www.tiktok.com/@tiktok/video/7000000000000000000
------------------------
标题:#duet with @charlidamelio 这个舞蹈太有趣了,你们也来试试吧!
作者:@tiktok
播放量:2.3M
点赞数:18.7K
评论数:2.4K
分享数:2.3K
链接:https://www.tiktok.com/@tiktok/video/7000000000000000001
------------------------
标题:#duet with @justinbieber 谢谢你的邀请,我很荣幸能和你一起唱歌!
作者:@tiktok
播放量:3.5M
点赞数:28.5K
评论数:3.6K
分享数:3.5K
链接:https://www.tiktok.com/@tiktok/video/7000000000000000002
------------------------

从输出中,我们可以看到,我们的爬虫成功地从TikTok网站上抓取了视频的信息和链接,而且没有被反爬虫机制识别和封锁。

对比和分析

为了更好地理解Symfony Panther的优势,我们可以和其他的PHP爬虫库进行一些对比和分析。

  • Guzzle:Guzzle是一个流行的PHP HTTP客户端库,它可以让你用PHP发送HTTP请求,获取网页的源代码。但是,Guzzle无法执行JavaScript,渲染网页,获取动态生成的内容,也无法直接操作浏览器,比如点击链接,填写表单等。你需要使用其他的工具,比如DomCrawler,XPath,CSS选择器等,来解析网页的源代码,提取出所需的数据,这会增加爬虫的复杂度,降低爬虫的效率。

  • Curl:Curl是一个内置的PHP扩展,它也可以让你用PHP发送HTTP请求,获取网页的源代码。但是,Curl和Guzzle有相同的问题,它也无法执行JavaScript,渲染网页,获取动态生成的内容,也无法直接操作浏览器,比如点击链接,填写表单等。你也需要使用其他的工具,比如DomCrawler,XPath,CSS选择器等,来解析网页的源代码,提取出所需的数据,这也会增加爬虫的复杂度,降低爬虫的效率。

  • PhantomJS:PhantomJS是一个无头浏览器,它可以让你用JavaScript来驱动一个真实的浏览器,执行JavaScript,渲染网页,获取动态生成的内容,也可以直接操作浏览器,比如点击链接,填写表单等。但是,PhantomJS需要你使用JavaScript来编写爬虫代码,而不是PHP,这会增加爬虫的学习成本,也会导致爬虫的语言不一致。而且,PhantomJS已经停止了开发和维护,它可能无法支持一些最新的网页技术,也可能存在一些安全和稳定性的问题。

  • Selenium:Selenium是一个自动化测试工具,它可以让你用多种语言,包括PHP,来驱动一个真实的浏览器,执行JavaScript,渲染网页,获取动态生成的内容,也可以直接操作浏览器,比如点击链接,填写表单等。但是,Selenium需要你安装和配置一个额外的服务器,来管理浏览器的驱动程序,这会增加爬虫的部署成本,也会导致爬虫的性能下降。而且,Selenium的API比较复杂,你需要学习和使用一些特定的语法,比如XPath,CSS选择器等,来定位和操作网页的元素,这会增加爬虫的开发难度。

从上面的对比和分析中,我们可以看到,Symfony Panther相比其他的PHP爬虫库,有以下的优势:

  • 它可以让你用PHP直接驱动真实的浏览器,执行JavaScript,渲染网页,获取动态生成的内容,无需使用第三方的工具,比如PhantomJS,Selenium等。

  • 它提供了一个简洁的API,让你可以用PHP直接操作浏览器,比如打开网页,点击链接,填写表单,截屏,下载文件等,无需学习复杂的语法,比如XPath,CSS选择器等。

  • 它集成了Symfony的DomCrawler和BrowserKit组件,让你可以用PHP轻松地解析网页的源代码,提取出所需的数据,无需使用正则表达式等。

  • 它支持使用代理IP,Cookie,User-Agent等,来处理网站的反爬虫机制,避免被识别和封锁。

结论

在这篇文章中,我向你介绍了Symfony Panther这个PHP库,它可以让你用PHP轻松地创建和运行强大的爬虫,甚至可以处理复杂的动态网页,比如TikTok这样的热门社交媒体网站。

我还向你展示了如何用Symfony Panther来构建一个简单的爬虫,从TikTok网站上抓取视频的信息和链接。我还给你展示了如何用代理IP技术,来避免被TikTok的反爬虫机制识别和封锁。

如果你对PHP和爬虫技术感兴趣,我希望这篇文章能给你一些启发和帮助。你可以尝试使用Symfony Panther,来编写你自己的爬虫,从网上抓取你感兴趣的数据。


本文转自PHP新潮流:教你如何用Symfony Panther库构建强大的爬虫,顺利获取TikTok网站的数据-CSDN博客如有侵权可联系删除

猜你喜欢

【PHP】php网络服务器有哪些软件
php网络服务器有Apache HTTP Server、Nginx、Microsoft Internet Information Services、Lighttpd和Caddy等。详细介绍:1、Apache HTTP Server,Apache是最流行的开源Web服务器软件之一,广泛应用于PHP开发,它稳定、可靠,支持多平台,具有丰富的功能和灵活的配置选项;2、Nginx等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。在PHP开发中,常用的网络
发表于:2023-12-04 浏览:564 TAG:
【PHP】PHP面试题
一、 PHP部分PHP如何实现静态化PHP的静态化分为:纯静态和伪静态。其中纯静态又分为:局部纯静态和全部纯静态。PHP伪静态:利用Apache mod_rewrite实现URL重写的方法;PHP纯静态,就是生成HTML文件的方式,我们须要开启PHP自带的缓存机制,即ob_start来开启缓存。PHP经典四大排序算法PHP的四种基本排序算法为:冒泡排序、插入排序、选择排序和快速排序。冒泡排序:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数来。插入排序:假设组前面的元
发表于:2024-05-22 浏览:297 TAG:
【PHP】php删除数组中的重复值
随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
发表于:2023-12-19 浏览:323 TAG:
【PHP】php加密函数有哪些
加密函数有md5函数、sha1函数、password_hash函数、password_verify函数等等。详细介绍:1、md5函数,一种常用的哈希算法,它将任意长度的输入数据转换为固定长度的哈希值;2、sha1函数,一种常用的哈希算法,它将输入数据转换为160位的哈希值;3、password_hash函数,是PHP 5.5及以上版本新增的函数,用于安全地存储密码的哈希值等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP是一种广泛使用的服务器
发表于:2023-12-06 浏览:344 TAG:
【PHP】php中几个不常用的函数方法
1.abs():返回一个数的绝对值;2.set_time_limit :设置脚本最大执行时间(如果设置为0则没有时间限制,默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。);3.strip_tags($str,&#39;&lt;p&gt;&lt;a&gt;&#39;):剥去除p和a标签外的字符串中、XML 以及 PHP 的标签;4.iconv():字符串按要求的字符编码来转换;5.is_dir():检查目录是否存在;6.mkdir():创建文
发表于:2024-08-02 浏览:304 TAG:
【PHP】关于PHP8中match新语句的骚操作
PHP8新语法:match [更骚的匿名函数操作]PHP8 新出的一个语法很好用,就是 match 语句。match 语句跟原来的 switch 类似,不过比 switch 更加的严格和方便原来的 switch 语句代码如下:function&nbsp;getStr(&nbsp;$strType&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;switch(&nbsp;$strType&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nb
发表于:2024-01-06 浏览:324 TAG:
【PHP】PHP8.0中的匿名函数
hp8.0是当前最新版本的php编程语言。一项重要的更新是对匿名函数的改进和增强。匿名函数(也称为闭包)是一种特殊类型的函数,可以在运行时动态创建并传递给其他函数或存储在变量中。在php中,匿名函数对于高级编程和web开发至关重要。PHP8.0提供了一些新的语法和功能,可以使匿名函数更加灵活和易于使用。其中一些更新如下:函数参数的类型声明在PHP8.0中,匿名函数可以声明其参数的类型。这意味着可以通过类型约束来限制函数参数的类型,以确保传递正确的参数类型。例如,以下代码使用匿名函数来计算两个整
发表于:2024-07-29 浏览:258 TAG:
【PHP】服务器怎么检测是不是php
随着互联网的发展和普及,服务器已成为人们日常使用的一种重要设备。服务器作为网站和应用程序的基础,承载着海量的数据和用户,对网站和应用程序的性能和稳定性有着决定性的影响。而其中最常用的服务器语言之一就是PHP,本文将探讨服务器如何检测是否为PHP。什么是PHP?PHP是一种服务器端脚本语言,由Rasmus Lerdorf创建于1994年。它用于创建动态网页,与HTML搭配使用,能够动态生成HTML、CSS和JavaScript等前端页面元素。PHP还可以连接数据库和服务器,实现网站和应用
发表于:2023-12-19 浏览:390 TAG:
【PHP】设计模式的六大原则
设计模式的六大原则是指导软件开发设计的核心原则,它们帮助开发人员创建可维护、可扩展和灵活的软件系统。这些原则包括:&nbsp;‌&nbsp;&nbsp;&nbsp;&nbsp;单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因。这有助于减少类与类之间的耦合,提高类的内聚性和可读性。&nbsp;‌&nbsp;&nbsp;&nbsp;&nbsp;开闭原则(Open-Closed Principle, OCP):软件实体(如类、
发表于:2024-07-16 浏览:278 TAG:
【PHP】php正则表达式有哪些
php正则表达式有&quot;/pattern/&quot;、&quot;^&quot;、&quot;$&quot;、&quot;.&quot;、&quot;[]&quot;、&quot;[^]&quot;、&quot;[a-z]&quot;、&quot;[A-Z]&quot;、&quot;[0-9]&quot;、&quot;\d&quot;、&quot;\D&quot;、&quot;\w&quot;、&quot;\W&quot;、&quot;\s&quot;、&quot;\S&amp;quo
发表于:2023-12-04 浏览:647 TAG: #php #网络服务器软件