在ThinkPHP6中使用QueryList

来源:undefined 2024-12-26 18:00:49 1017

随着互联网技术的不断发展,数据爬虫已经成为了人们获取信息的重要方式之一。在php的框架中,thinkphp6不仅提供了强大的数据操作功能,还为我们提供了一种名为querylist的数据抓取库来帮助我们更方便地获取数据。

QueryList是一个基于流式链式操作的PHP数据采集与处理类库,可以从HTML、XML、JSON、TXT等各种类型的文本中提取数据。本文将主要介绍在ThinkPHP6中如何使用QueryList来实现数据的抓取和处理。

1. 安装QueryList

首先,我们需要在我们的ThinkPHP6应用中安装QueryList。可以通过以下命令来使用Composer进行安装:

1

composer require jaeger/querylist

登录后复制

安装完成后,我们需要在应用的config目录下创建一个querylist.php配置文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php return [

default => [

type =&gt; php,

host =&gt; ,

login =&gt; ,

password =&gt; ,

database =&gt; ,

prefix =&gt; ,

charset =&gt; utf8,

deploy =&gt; 0,

rw_separate =&gt; false,

master_num =&gt; 1,

slave_no =&gt; ,

fields_fix=&gt;"fl_",

debug =&gt; true,

logfile =&gt; QueryList.log,

],

];

登录后复制

这个配置文件是QueryList的默认配置,配置文件中的各个参数的含义和用法可以在QueryList的官方文档中查看。

2. 使用QueryList进行数据抓取

QueryList提供了一系列的链式操作方法来帮助我们获取和处理数据,这些方法包含了查找、筛选、提取和转换等一系列常见的数据操作。

以下是一个简单的例子,我们将使用QueryList来抓取百度首页的数据,并输出标题和链接。

1

2

3

4

5

6

7

8

9

use QLQueryList;

$html = file_get_contents(https://www.baidu.com);

$rules = [

title =&gt; [title, text],

link =&gt; [a, href]

];

$data = QueryList::html($html)-&gt;rules($rules)-&gt;query()-&gt;getData();

print_r($data-&gt;all());

登录后复制

以上代码片段中,我们首先使用PHP自带的file_get_contents函数获取了百度首页的源代码,然后定义了一个规则数组$rules,表示我们需要抓取的数据的类型和位置。在这个例子中,我们需要提取出网页中所有的标题和链接。

在定义好规则之后,我们将HTML文本转化成查询对象,并将规则应用到查询对象中,最后通过getData方法获取到数据。使用print_r方法来输出获取到的所有数据,我们可以看到输出的结果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

Array

(

[0] =&gt; Array

(

[title] =&gt; 百度一下,你就知道

[link] =&gt; https://www.baidu.com/s?tn=site888_2_pg&amp;ch=12&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=15&amp;rsv_sug1=12&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=0&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=3114

)

[1] =&gt; Array

(

[title] =&gt; 新闻

[link] =&gt; https://www.baidu.com/s?cl=2&amp;tn=site888_2_pg&amp;ch=11&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=19&amp;rsv_sug1=17&amp;rsv_sug7=101&amp;sug=0&amp;prefixsug=news&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=4085

)

[2] =&gt; Array

(

[title] =&gt; hao123_上网从这里开始

[link] =&gt; https://www.baidu.com/s?cl=3&amp;tn=site888_2_pg&amp;ch=6&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=25&amp;rsv_sug1=23&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=hao123&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=5329

)

[3] =&gt; Array

(

[title] =&gt; 地图

[link] =&gt; https://www.baidu.com/s?cl=4&amp;tn=site888_2_pg&amp;ch=1&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=31&amp;rsv_sug1=28&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=map&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=6166

)

[4] =&gt; Array

(

[title] =&gt; 视频

[link] =&gt; https://www.baidu.com/s?cl=5&amp;tn=site888_2_pg&amp;ch=8&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=37&amp;rsv_sug1=34&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=video&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=7407

)

[5] =&gt; Array

(

[title] =&gt; 贴吧

[link] =&gt; https://www.baidu.com/s?cl=6&amp;tn=site888_2_pg&amp;ch=7&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=43&amp;rsv_sug1=39&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=tf&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=8649

)

[6] =&gt; Array

(

[title] =&gt; 学术

[link] =&gt; https://www.baidu.com/s?cl=7&amp;tn=site888_2_pg&amp;ch=9&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=49&amp;rsv_sug1=45&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=xueshu&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=9890

)

[7] =&gt; Array

(

[title] =&gt; 登录

[link] =&gt; https://passport.baidu.com/v3/?reg&amp;redirect=http%3A%2F%2Fwww.baidu.com%2F&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2F

)

)

登录后复制

可以看到,我们已经成功地提取出了页面中的标题和链接。通过简单的链式操作,我们就可以完成数据的抓取和处理。

3. 使用QueryList进行数据存储

在进行数据抓取和处理之后,我们有可能需要将获取的数据存储到数据库中,以便后续的使用。QueryList提供了一个方便的方法来将数据存储到数据库中,以下是一个简单的例子,我们将数据存储到MySQL数据库中。

1

2

3

4

5

6

7

8

9

10

use QLQueryList;

$rules = [

title =&gt; [title, text],

link =&gt; [a, href]

];

$data = QueryList::get(https://www.baidu.com)-&gt;rules($rules)-&gt;query()-&gt;getData();

$db = new     hinkDb;

$affected = $db::table(test)-&gt;insertAll($data-&gt;all());

echo 添加成功 . $affected . 条数据;

登录后复制

首先,我们定义了之前的规则数组和获取数据的方法。在这个例子中,我们使用了QueryList的get方法来获取页面的数据。获取数据后,我们首先实例化了一个数据库操作类,然后使用insertAll方法将数据批量插入到数据库中。

执行上述代码之后,我们可以在MySQL数据库中看到新插入的数据。

综上所述,在ThinkPHP6中使用QueryList能够非常方便地完成数据的抓取和处理,并且也能够很方便地将抓取到的数据存储到数据库中。QueryList的链式操作方式也非常适合数据的处理和转换。

以上就是在ThinkPHP6中使用QueryList的详细内容,更多请关注php中文网其它相关文章!

最新文章