PHP如何实现抓取百度搜索结果并分析数据结构

发布时间:2020-09-26 09:26:19

来源:亿速云

阅读:95

作者:小新

这篇文章主要介绍PHP如何实现抓取百度搜索结果并分析数据结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构

百度的搜索引擎有反爬虫机制,我先直接用guzzle试试水。代码如下:<?php

/**

* Created by Benjiemin

* Date: 2020/3/5

* Time: 14:58

*/

require ('./vendor/autoload.php');

use QL\QueryList;

//进入网页

$jar = new \GuzzleHttp\Cookie\CookieJar;

$client = new GuzzleHttp\Client(['cookies' => true]);

$ql = $client->request('GET', 'https://www.baidu.com', [

'cookies' => $jar

]);

if($ql->getStatusCode()!=200){

echo '网站状态不正常';die;

}

echo $ql->getBody();

百度直接拦截了,进了跳转页面,我试试加个浏览器头文件,再试试。

修改后的header如下:$ql = $client->request('GET', 'https://www.baidu.com', [

'cookies' => $jar,

'headers' => [

'Accept-Encoding' => 'gzip, deflate, br',

'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8',

'Cache-Control' => 'no-cache',

'Connection' => 'keep-alive',

'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

]

]);

我测试了下,网站打开了。

我们继续,输入关键词,并搜索,结果发现被安全拦截了,所以我感觉直接用GuzzleHttp搞不动,于是我继续我的神器:jaeger/querylist和jaeger/querylist-puppeteer。

安装步骤:

1.安装依赖

在这之前,要先启用php的proc_open函数,否则无法安装完整composer install jaeger/querylist

composer install jaeger/querylist-puppeteer

2.安装nodejsyum install nodejs

3.安装npm

4.安装@nesk/puphpeteernpm install @nesk/puphpeteer

5.PHP启用proc_open

代码如下:<?php

/**

* Created by Benjiemin

* Date: 2020/3/5

* Time: 14:58

*/

require ('./vendor/autoload.php');

use QL\QueryList;

use QL\Ext\Chrome;

$ql = QueryList::getInstance();

// 注册插件,默认注册的方法名为: chrome

$ql->use(Chrome::class);

$ql->chrome(function ($page,$browser) {

$page->goto('https://www.baidu.com');

// 这里故意设置一个很长的延长时间,让你可以看到chrome浏览器的启动

sleep(3);

//输入关键词

$wd = '简庆旺博客';

$page->type("input[id='kw']",$wd);

sleep(1);

//点击搜索

$page->click("input[type='submit']");

//等待搜索结果

sleep(3);

//获取结果

$html = $page->content();

//用jquery选择器抽取结果

$rules = array(

'title'=>['#content_left h4 a','text'],//标题

'url'=>['#content_left h4 a','href'],//跳转网址

'description'=>['div .c-abstract','text'],//描述

);

$ql = QueryList::html($html);

$rt = $ql->rules($rules)->query()->getData();

//如果有需要,可以把$rt入库,以及做其他操作

sleep(10);

$browser->close();

// 返回值一定要是页面的HTML内容

return $html;

},[

'headless' => false, // 启动可视化Chrome浏览器,方便调试

'devtools' => false, // 打开浏览器的开发者工具

])->find('title')->text();

$rt是我的结果集合,打印下,如下

以上是PHP如何实现抓取百度搜索结果并分析数据结构的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

如何在php搜索显示数据库数据结构_PHP如何实现抓取百度搜索结果并分析数据结构...相关推荐

  1. java抓取百度搜索结果_java实现抓取百度对某站点搜索结果

    htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度 ...

  2. 【Python爬虫教学】百度篇·手把手教你抓取百度搜索关键词后的页面源代码

    [开门见山] 最近整理了下之前做过的项目,学的东西不少,乱七八糟.打算写点关于 Python 爬虫的东西,新人一枚,还望大佬们多多担待,别把我头给打歪了. 前面我先磨叽磨叽些基础的东西,对爬虫新人友好 ...

  3. scrapy 搜索关键字_详解如何用爬虫批量抓取百度搜索多个关键字数据

    本文介绍如何使用软件的流程图模式,免费采集百度搜索多个关键字的信息数据. 软件下载网址:www.houyicaiji.com 采集结果预览: 下面我们来详细介绍一下如何使用流程图模式,采集在百度输入多 ...

  4. 详解如何用爬虫批量抓取百度搜索多个关键字数据

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍如何使用软件的流程图模式,免费采集百度搜索多个关键字的信息数据. 软件下载网址:www.houyicaiji.com ...

  5. python新闻关键词次数_使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  6. php抓取百度搜索百度快照,php抓取百度快照、百度收录、百度热词程序代码,抓取百度快照_PHP教程...

    php抓取百度快照.百度收录.百度热词程序代码,抓取百度快照 /* 抓取百度收录代码 */ function baidu($s){ $baidu="http://www.baidu.com/ ...

  7. python爬取百度百科搜索结果_用Python抓取百度搜索结果,python,爬取,的

    前言 前几天爬的今天整理了一下发现就两个需要注意的点 一是记得用带cookie的方式去访问,也就是实例化requests.session() 二是转化一下爬取到的url,访问爬到的url得到返回的Lo ...

  8. python爬取百度域名注册_python爬取百度域名_python爬取百度搜索結果url匯總

    寫了兩篇之后,我覺得關於爬蟲,重點還是分析過程 分析些什么呢: 1)首先明確自己要爬取的目標 比如這次我們需要爬取的是使用百度搜索之后所有出來的url結果 2)分析手動進行的獲取目標的過程,以便以程序 ...

  9. HttpClient 实现爬取百度搜索结果(自动翻页)

    如果你对HttpClient还不是很了解,建议先移步我的另一篇博客HttpClient4.x之请求示例后再来看这篇博客.我们这里的项目采用maven搭建.在阅读前要对jdk和maven有一定的了解.另 ...

最新文章

  1. virtualvenv+django+uWSGI+nginx 部署 踩坑记录
  2. mfc 隐藏主窗口 visible_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...
  3. 2017蓝桥杯省赛---java---A---1(迷宫)
  4. [计数排序]统计三个数和的[最大概率](洛谷P2911题题解,Java语言描述)
  5. 迪迦奥特曼“亲临”发布会!一加9R今日发布:价格成唯一悬念
  6. mpvue微信小程序动画_在 mpvue 使用 echarts 小程序组件
  7. Spring MVC JSR-303验证框架之Hibernate-Validator
  8. 应用机器学习(五):支持向量机
  9. Jenkins手动更新AWS 上面的ECS服务
  10. 编写一个程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来(例如:输入asd123,34fgh_566kkk789,则产生的数字分别是123、34、789)。
  11. win10家庭版升级到企业版
  12. 使用jaxb解析XML
  13. 原型工具XSTAR与AXURE对比
  14. RGB颜色与颜色名称对照表
  15. 微信小程序生命周期和路由传参详解
  16. 深入Kubernetes 之 DaemonSet :容器化守护进程
  17. JavaScript学习(七)——对象与数组、内部对象(1)
  18. dateframe取某列数据_DataFrame数据选取全攻略
  19. 关于AQS中自旋的理解
  20. 五种网络I/O模型详解

热门文章

  1. Qt Post上传图片文件到服务器
  2. python的django后台管理_python测试开发django-17.admin后台管理
  3. ssm打印sql如何开启_mybatis怎么配置log4j打印出sql语句
  4. 复制(主从复制、读写分离)
  5. C/Cpp / 虚函数是否可以用 inline 修饰
  6. Cpp 对象模型探索 / 含有虚基类的类的内存布局
  7. python 词表里的词不符合_用骰子DIY真随机助记词 | 火星号精选
  8. python延时函数_Python实现屏幕自动截图
  9. e语言html显示框,html marguee标签
  10. 江苏广电总台面试java_江苏广电面试 江苏广电25位面试官坐镇终面 - 86资讯网