百度的搜索引擎有反爬虫机制,我先直接用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();
PHP
Copy

 

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

修改后的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',
]
]);
PHP
Copy

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

 

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

安装步骤:

1.安装依赖

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

composer install jaeger/querylist

composer install jaeger/querylist-puppeteer

2.安装nodejs

yum install nodejs

3.安装npm

4.安装@nesk/puphpeteer

npm 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 h3 a','text'],//标题
'url'=>['#content_left h3 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();
PHP
Copy

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

 
 

原文在我博客:

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

PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构的更多相关文章

  1. selenium-java web自动化测试工具抓取百度搜索结果实例

    selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...

  2. C#+Selenium抓取百度搜索结果前100网址

    需求 爬取百度搜索某个关键字对应的前一百个网址. 实现方式 VS2017 + Chrome .NET Framework + C# + Selenium(浏览器自动化测试框架) 环境准备 创建控制台应 ...

  3. java网络爬虫----------简单抓取慕课网首页数据

    © 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...

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

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

  5. Python网络编程_抓取百度首页代码(注释详细)

    1 #coding=utf-8 2 #网络编程 3 4 #客户端建立socket套接字 5 #引入socket模块 6 import socket 7 #实例化一个套接字,2个参数分别是: IPV4. ...

  6. python爬取百度搜索结果ur汇总

    写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序 ...

  7. Python爬虫之小试牛刀——使用Python抓取百度街景图像

    之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...

  8. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  9. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

随机推荐

  1. EXAM-2018-08-21

    EXAM-2018-08-21 自己真的是菜的恐怖 D:Fence Building 欧拉公式:V-E+F=2 在平面中:V为顶点个数,E为边数,F为区域数 在简单几何体中:V为顶点个数,E为边数,F ...

  2. vue项目打包部署elementUI的字体图标丢失问题

    自己搭建的Vue项目,没有使用vue-cli,引入elementUI时,使用的是webpack直接打包工具,发现字体图标丢失你 记录一下解决办法: webpack module配置:(build目录下 ...

  3. 项目中关于RPC 和rocketMQ使用场景的感受

    在花生待的这半年,切身体会了系统之间交互场景的接口技术实现方式,个人总结.仅供参考: 1.关于rpc接口,一般情况下 都是同步的.A系统的流程调用B系统.等着B返回,根据返回结果继续进行A接下来的流程 ...

  4. SVN服务器的搭建(二)

    上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用. 首先打开Vi ...

  5. 00 - 准备 Anaconda 环境

    Anaconda 环境 官方下载安装包:https://www.anaconda.com/download/ Anaconda Navigtor :用于管理工具包和环境的图形用户界面,后续涉及的众多管 ...

  6. linux中find,locate,whereis,which关系和用法

    主要有find,locate,whereis,which等 1. find是最常用也是最强大的查找命令,它可以查找任何类型的文件. find命令的一般格式为:find <指定目录>< ...

  7. 1.redis安装配置

    Redis 1.Redis安装: 说明: 1.也是一种类似于Memcached的kev-value机制的存储服务 2.是非关系型数据库(NoSQL)的一种. 3.官网:www.redis.io,中文网 ...

  8. ui-choose|列表选择jQuery美化插件

    ui-choose是一款基于jQuery的列表选择美化插件.ui-choose可用于选项不太多的select.radio.checkbox等,提升用户体验. 使用方法 使用ui-choose列表美化插 ...

  9. [LC] 234. Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  10. OpenCV、EmguCV函数注解