PHP在做爬蟲時的解決方案

爬蟲不是一個小眾的場景,所以無論是哪個語言,都有很多相應的生態庫.這里介紹一下PHP的技術方案和代碼量。

關鍵能力

對頁面的解析能力

PHP的官方擴展中有Dom擴展,但是我建議使用electrolinux/phpquery這個庫,他相當于一個PHP版的JQ.

算上加載文件,只要三行就能獲取title標簽內容.

<?php
include 'phpQuery-onefile.php';$file = 'test.html'; // 加載文件
phpQuery::newDocumentFileHTML($file);// 加載之后就可以使用JQ的操作方法去解析.$titleElement = pq('title'); // 也可以使用對象的操作方式
$title = $titleElement->html();

對數據庫的操作能力

PHP對數據庫的操作能力不是吹的,原生擴展中支持PDO,這里可以嘗試ThinkPHP的think-orm.

簡簡單單一學就會.

use think\facade\Db;
// 數據庫配置信息設置(全局有效)
Db::setConfig([// 默認數據連接標識'default'     => 'mysql',// 數據庫連接信息'connections' => ['mysql' => [// 數據庫類型'type'     => 'mysql',// 主機地址'hostname' => '127.0.0.1',// 用戶名'username' => 'root',// 數據庫名'database' => 'demo',// 數據庫編碼默認采用utf8'charset'  => 'utf8',// 數據庫表前綴'prefix'   => 'think_',// 數據庫調試模式'debug'    => true,],],
]);// 查詢
Db::name('user')->where('id', 1)->find();
// 新增
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data);
//更新
Db::name('user')->update(['id' => 1, 'name' => 'thinkphp']);
// 刪除
Db::table('think_user')->where('id', 1)->delete();

爬蟲效率

PHP對于性能的優化有很多很深的解決方案,包括使用協程等,這里只介紹最簡單的的一種方式,使用guzzle這個庫(他使用curl 的并行加載特性).

use GuzzleHttp\Client;
use GuzzleHttp\Promise;$client = new Client(['base_uri' => 'http://httpbin.org/']);// 發起不阻塞的請求
$promises = ['image' => $client->getAsync('/image'),'png'   => $client->getAsync('/image/png'),'jpeg'  => $client->getAsync('/image/jpeg'),'webp'  => $client->getAsync('/image/webp')
];// 等待所有請求完成
$responses = Promise\Utils::settle($promises)->wait();

代碼量

如上面例子所示,代碼量并不多,去掉配置文件,只有十幾行代碼,最關鍵的是我們需要的特性并沒有削弱.

比如:

  • 極簡的DOM解析
  • 健壯的SQL操作
  • 發起并行請求

解析JS

有時候我們要抓取的頁面是依賴JS執行的,這是需要一個無頭瀏覽器,此時介紹這樣一個庫,他能夠很簡單的完成對phantomjs的操作.

PHP PhantomJS 是一個靈活的 PHP 庫,讓PHP通過很簡單的代碼來操作 PhantomJS 無頭瀏覽器加載頁面。 讓PHP加載的網頁地址執行JS/頁面截圖/導出PDF.

他可以非常方便的實現這些功能:

  • 使用無頭瀏覽器PhantomJS加載請求
  • 查看詳細的響應數據,包括頁面內容、標題、狀態 代碼等
  • 處理重定向
  • 查看JS控制臺輸出報錯
  • 查看詳細的PhantomJS調試信息
  • 保存頁面的截圖
  • 將頁面導出為PDF
  • 設置瀏覽窗口大小
  • 為PDF導出設置頁眉頁腳
  • 指定截圖位置x,y和寬高
  • 延遲頁面渲染(等待頁面加載完成)
  • 輕松構建和運行PhantomJS腳本

PHP PhantomJS 只要求 PHP 5.4.0 或以上即可。

基本用法

使用phantomjs發起一個請求非常簡單:

<?phpuse JonnyW\PhantomJs\Client;$client = Client::getInstance();/*** @see JonnyW\PhantomJs\Http\Request**/$request = $client->getMessageFactory()->createRequest('http://phpreturn.com', 'GET');/*** @see JonnyW\PhantomJs\Http\Response**/$response = $client->getMessageFactory()->createResponse();// Send the request$client->send($request, $response);if($response->getStatus() === 200) {// Dump the requested page contentecho $response->getContent();}

使用PHP總是更舒服,更簡單.

原文標題: PHP在做爬蟲時的解決方案

原文地址: https://phpreturn.com/index/a62235bdfe4e70.html

原文平臺: PHP武器庫

版權聲明: 本文由phpreturn.com(PHP武器庫官網)原創和首發,所有權利歸phpreturn(PHP武器庫)所有,本站允許任何形式的轉載/引用文章,但必須同時注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zookeeper Curator(2):Curator的節點操作

文章目錄 zookeeper 的安裝Curator 介紹Curator API 常用操作本章必要的相關依賴和配置建立連接第一種方式第二種方式 關閉連接添加節點創建節點創建節點并設置值和類型創建多級節點 查詢節點查詢數據查詢所有子節點查詢節點信息 修改節點修改節點數據修改節點(樂觀鎖修改&…

計算機視覺的定義及應用方向

近兩年來&#xff0c;機器學習、深度學習、人工智能等方向逐步成為很多同學最關注的研究和就業方向。不可否認&#xff0c;計算機視覺作為深度學習的應用領域之一&#xff0c;在工業界取得了蓬勃的發展&#xff0c;也是目前最熱門的方向之一。 計算機視覺是什么 計算機視覺主要…

低代碼開發實戰:使用活字格快速創建 Java Web API

引言 在當今快速發展的軟件開發領域&#xff0c;低代碼平臺因其高效性和易用性而備受關注。Java Web API作為企業級應用開發的重要組成部分&#xff0c;與低代碼平臺的結合能夠顯著提升開發效率。本文將以葡萄城活字格平臺為例&#xff0c;詳細介紹如何利用其低代碼特性快速創…

當后端接口返回格式不是easyui默認的格式,怎么辦

方法:可以增加一個數據過濾方法對后端的接口結構進行轉換。 分析:easyui默認情況下,只能接收如下格式的接口: {"total": 1,"rows": [{"id": 1,"userName": "jiao","unionId": 1,"phone": "2…

第一彈 AC Module: 和編程語言無關以AI為中心的自包含模塊化理念和實現

背景和問題 說起模塊/包&#xff0c;幾乎是大部分語言都有的概念&#xff0c;因為一個項目會很龐大&#xff0c;如果單純只用文件做隔離&#xff0c;文件可能幾千上萬個&#xff0c;所以需要在項目和文件之間獲得一個平衡&#xff0c;這個時候就有包和模塊的概念。比如python 你…

Edge(chrome)右鍵插件的右鍵菜單怎么設置

主要使用 contextMenus 右鍵菜單功能&#xff0c;正常用它給頁面設置右鍵菜單&#xff0c;其實它也可以給插件還有其它功能設置右鍵菜單&#xff0c;是根據 contexts 選項來設置給哪個功能設置右鍵菜單。 首先添加權限 "permissions": ["contextMenus"], …

后端設計筆記13 FM

1.理論 2.實踐 LAB 報錯以后可以雙擊錯誤&#xff0c;便可以定位到錯誤&#xff0c;或者打開pattern查看 還可以analyse

閑庭信步使用SV搭建圖像測試平臺:第十九課——YCbCr圖像轉RGB圖像

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程文件請關注…

C++(智能指針)

智能指針 1.基礎&#xff1a; 1.1 概念 智能指針是用于自動管理動態分配內存的RAII&#xff08;Resource Acquisition Is Initialization&#xff09;對象。它們通過自動釋放內存來防止內存泄漏&#xff0c;是替代裸指針的安全工具。 1.2 解析 眾所周知&#xff0c;堆內存對象…

Sentinel 授權規則詳解與自定義異常處理

Sentinel 授權規則詳解與自定義異常處理 在微服務系統中&#xff0c;權限控制和訪問保護是至關重要的一環。本文將詳細介紹如何通過 Sentinel 的 授權規則&#xff08;AuthorityRule&#xff09; 控制資源訪問權限&#xff0c;并結合實際案例說明如何設置白名單與黑名單&#…

LeetCode Hot 100 最大子數組和

給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組是數組中的一個連續部分。 示例 1&#xff1a; 輸入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 輸出&#xff1a;6…

Python UI自動化演進格局:從傳統庫到AI驅動的智能代理

引言 UI自動化的持久需求 在現代軟件工程和業務流程管理中&#xff0c;圖形用戶界面&#xff08;GUI&#xff09;自動化扮演著至關重要的角色。它不僅僅局限于軟件測試領域&#xff0c;更是機器人流程自動化&#xff08;RPA&#xff09;、自動化數據錄入、遺留系統集成以及在AP…

【Java面試】如何解決MQ死信隊列?

如何解決MQ死信隊列&#xff1f; 一、預防死信產生&#xff08;從源頭減少死信&#xff09; 消費者端健壯性優化 捕獲所有可能的異常&#xff0c;區分可恢復異常&#xff08;如網絡超時&#xff09;和不可恢復異常&#xff08;如數據格式錯誤&#xff09;。對可恢復異常實現自…

RGB+EVS視覺融合相機:事件相機的革命性突破?

一、單一EVS事件相機的原理 事件相機&#xff08;EVS&#xff09;是一種新型的視覺傳感器&#xff0c;其設計靈感來源于生物視覺系統。與傳統相機不同&#xff0c;事件相機并不以固定的幀率捕獲整個圖像&#xff0c;而是每個像素獨立工作&#xff0c;當檢測到亮度變化超過預設…

DBeaver 設置阿里云中央倉庫地址的操作步驟

DBeaver 設置阿里云中央倉庫地址的操作步驟&#xff08;適用于解決驅動下載緩慢或失敗的問題&#xff09; 一、最新阿里云 Maven 倉庫地址 主倉庫地址&#xff08;推薦&#xff09;&#xff1a; http://maven.aliyun.com/nexus/content/groups/public/ 123 備用地址&#xff…

Qt:QCustomPlot庫的QCPAxis

在 QCustomPlot 中&#xff0c;QCPAxis 是圖表坐標系的核心組件&#xff0c;負責管理坐標軸的所有視覺和功能特性。它提供了豐富的定制選項&#xff0c;使開發者能夠創建高度專業化的數據可視化圖表。 核心功能概述 功能類別關鍵特性相關方法基本結構坐標軸位置、方向axisTyp…

七天學會SpringCloud分布式微服務——05——OpenFeign

1、OpenFeign實現遠程調用 1.1 services.pom引入依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>1.2 在service-order微服務中新建feign.Product…

大語言模型的通用局限性與全球技術演進

基于行業最新數據修訂&#xff08;2025Q2&#xff09; 一、知識截止期&#xff1a;全球模型的進化差異 所有LLM都存在??知識截止期&#xff08;Knowledge Cut-off&#xff09;??&#xff0c;即模型訓練數據的時間上限。這在技術迭代飛快的軟件開發領域尤為致命——2023年后…

常見網絡安全威脅和防御措施

網絡安全威脅是一種技術風險&#xff0c;會削弱企業網絡的防御能力&#xff0c;危及專有數據、關鍵應用程序和整個 IT 基礎設施。由于企業面臨廣泛的威脅&#xff0c;因此他們應該仔細監控和緩解最關鍵的威脅和漏洞。網絡安全問題有七大類&#xff0c;它們都包括多種威脅&#…

人工智能和云計算對金融未來的影響

你有沒有想過&#xff0c;你的錢是否會由人工智能而不是銀行來管理&#xff1f;如果你的銀行不存在于真實的地方&#xff0c;而是存在于幾千公里之外的某臺大型超級計算機上&#xff0c;那會怎樣&#xff1f;這可能有一天會發生&#xff0c;讓我們看看它是如何發生的&#xff0…