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.安装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();
$rt是我的结果集合,打印下,如下

原文在我博客:
PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构
PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构的更多相关文章
- selenium-java web自动化测试工具抓取百度搜索结果实例
selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...
- C#+Selenium抓取百度搜索结果前100网址
需求 爬取百度搜索某个关键字对应的前一百个网址. 实现方式 VS2017 + Chrome .NET Framework + C# + Selenium(浏览器自动化测试框架) 环境准备 创建控制台应 ...
- java网络爬虫----------简单抓取慕课网首页数据
© 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...
- 使用python抓取百度搜索、百度新闻搜索的关键词个数
由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...
- Python网络编程_抓取百度首页代码(注释详细)
1 #coding=utf-8 2 #网络编程 3 4 #客户端建立socket套接字 5 #引入socket模块 6 import socket 7 #实例化一个套接字,2个参数分别是: IPV4. ...
- python爬取百度搜索结果ur汇总
写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序 ...
- Python爬虫之小试牛刀——使用Python抓取百度街景图像
之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...
- Python抓取百度百科数据
前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...
- Python爬虫实战---抓取图书馆借阅信息
Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...
随机推荐
- kaggle注册获取数据
安装谷歌访问助手,主要参考下面的作者写的 https://segmentfault.com/a/1190000020548973?utm_source=tag-newest 安装之后,打开蓝灯或其他翻 ...
- Class<T> 泛型获取T的class
getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类.接口.基本类型或 void)的直接超类的 Type然后将其转换ParameterizedTy ...
- Graylog
Graylog #Graylog 是与 ELK 可以相提并论的一款集中式日志管理方案,支持数据收集.检索.可视化 #Graylog 架构 - Graylog 负责接收来自各种设备和应用的日志,并为用 ...
- MySQL_备份
Mysql 的备份 前情了解与小试 三种级别的备份与恢复数据:1.表级别备份:mysqldump [OPTIONS] database [tables]mysqldump -p密码 库名 表名 &g ...
- 定时任务--Timer()实现
Java的Timer以及TimerTask类可以帮助我们实现定时器功能,利用servlet监听程序可以实现WEB服务启动之后执行某些工作.两者结合就可以再web应用中实现定时器功能. 1.计划类代码S ...
- WMS出库单重复
发货通知单?WMS备货单选项勾选 不自动复制?新增?
- RHEL安装神器EPEL
什么是EPEL? EPEL的全称叫 Extra Packages for Enterprise Linux .EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS.Scie ...
- window下mysql安装步骤
1. 官网下载mysql zip包 2. 解压后再D:\database\mysql\mysql-5.7.26-winx64下添加my.ini文件,文件内容如下: [mysql]# 设置mysql客户 ...
- T-SQL总结
先简单说一下 SQL是国际组织订的统一标准,各数据库厂商根据该标准开发自己的数据库及语言 T-SQL就是Microsoft公司的 oracle的是PL/SQL 下面我们主要总结T-SQL: 1.T-S ...
- vuex-cart 介绍
使用vue2 + vuex + vue-cli + localStorage + less,实现本地储存的购物车. 安装 1 git clone https: 1 cd sls-vuex 1 npm ...