php snoopy視頻教程,php的Snoopy類

用了兩天這個類,發現很好用。

獲取請求網頁里面的所有鏈接,直接使用fetchlinks就可以,獲取所有文本信息使用fetchtext(其內部還是使用正則表達式在進行處理),還有其它較多的功能,如模擬提交表單等。

使用方法:

1、先下載Snoopy類,下載地址:http://sourceforge.net/projects/snoopy/

2、先實例化一個對象,然后調用相應的方法即可獲取抓取的網頁信息

示例:

include 'snoopy/Snoopy.class.php'; $snoopy = new Snoopy(); $sourceURL = "http://xxxxxxxxx";$snoopy->fetchlinks($sourceURL); $a = $snoopy->results;

它并沒有提供獲取網頁中所有圖片地址的方法,自己有個需求是要獲取一個頁面中所有文章列表中圖片地址。然后自己就寫了一個,主要還是正則那里匹配重要。

//匹配圖片的正則表達式 $reTag = "/

php-weizijiaocheng-266545.html/i";

因為需求比較特殊,只需要抓取寫死htp://開頭的圖片(外站的圖片可能使得了防盜鏈,想先抓取到本地)

實現思路:

1、抓取指定網頁,并篩選出預期的所有文章地址;

2、循環抓取第一步中的文章地址,然后使用匹配圖片的正則表達式進行匹配,獲取頁面中所有符合規則的圖片地址;

3、根據圖片后綴和ID(這里只有gif、jpg)保存圖片---如果此圖片文件存在,先將其刪除再保存

fetchlinks($sourceURL); $a = $snoopy->results; $re = "/\d+\.html$/"; //過濾獲取指定的文件地址請求 foreach ($a as $tmp) { if (preg_match($re, $tmp)) { getImgURL($tmp); } } function getImgURL($siteName) { $snoopy = new Snoopy(); $snoopy->fetch($siteName); $fileContent = $snoopy->results; //匹配圖片的正則表達式 $reTag = "/

php-weizijiaocheng-266545.html/i"; if (preg_match($reTag, $fileContent)) { $ret = preg_match_all($reTag, $fileContent, $matchResult); for ($i = 0, $len = count($matchResult[1]); $i < $len; ++$i) { saveImgURL($matchResult[1][$i], $matchResult[2][$i]); } } } function saveImgURL($name, $suffix) { $url = $name.".".$suffix; echo "請求的圖片地址:".$url."

"; $imgSavePath = "E:/xxx/style/images/"; $imgId = preg_replace("/^.+\/(\d+)$/", "\\1", $name); if ($suffix == "gif") { $imgSavePath .= "emotion"; } else { $imgSavePath .= "topic"; } $imgSavePath .= ("/".$imgId.".".$suffix); if (is_file($imgSavePath)) { unlink($imgSavePath); echo "

文件".$imgSavePath."已存在,將被刪除"; } $imgFile = file_get_contents($url); $flag = file_put_contents($imgSavePath, $imgFile); if ($flag) { echo "

文件".$imgSavePath."保存成功"; } }?>

在使用php抓取網頁:內容、圖片、鏈接的時候,我覺得最重要的還是正則(根據抓取的內容和指定的規則獲取想要的數據),思路其實都比較簡單,用到的方法也并不多,也就那幾個(而且抓取內容還是直接調用別人寫好的類中的方法就可以了)

但之前想過的是php似乎并沒有實現如下的方法,比如一個文件中有N行(N很大),需要將其中符合規則的行內容進行替換,如第3行是aaa需要轉成bbbbb。一般的需要修改文件時的常見做法:

1、一次讀取整個文件(或是逐行讀取),然后使用臨時文件進行保存最終轉換后的結果,再替換原始文件

2、逐行讀取,使用fseek控制文件指針的位置,然后fwrite寫入

方案1在文件較大時,一次讀取不可取(逐行讀取,然后寫入臨時文件再替換原始文件效率感覺也不高),方案2則在被替換的字符串長度小于等于目標值時沒問題,但超過了則會有問題,它會“越界”,將下一行的數據也打亂了(不能像JavaScript中有“選區”的概念,使用新的內容進行替換)

下面是使用方案2做試驗的代碼:

先讀取一行,此時文件指針其實是指到下一行開頭,使用fseek將文件指針回移到上一行起始位置,然后使用fwrite進行替換操作,正因為是替換操作,在不指定長度的情況下,它把影響到下一行的數據,而我想要的是只想針對這一行進行操作,例如刪除這一行或是整行只替換為一個1,上面的例子達不到要求,或許是我還沒有找到合適的方法… 你有好的方法嗎?

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

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

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

相關文章

網頁解析 css

網頁解析 css轉載于:https://www.cnblogs.com/guozepingboke/p/10792298.html

如何看pg數據庫版本號_查看pg數據庫版本

PostgreSQL 基本命令鏈接&#xff1a;http://blog.itpub.net/28602568/viewspace-1841163/標題&#xff1a;PostgreSQL 基本命令作者&#xff1a;&#xff4c;ōττ&#xff52;&#xff59;©版權所有[文章允許轉載,但必須以鏈接方式注明源地址,否則追究法律責任.]安裝步…

leetcode1091. 二進制矩陣中的最短路徑(bfs)

在一個 N N 的方形網格中&#xff0c;每個單元格有兩種狀態&#xff1a;空&#xff08;0&#xff09;或者阻塞&#xff08;1&#xff09;。一條從左上角到右下角、長度為 k 的暢通路徑&#xff0c;由滿足下述條件的單元格 C_1, C_2, ..., C_k 組成&#xff1a;相鄰單元格 C_i …

lock和synchronized的同步區別與選擇

區別如下&#xff1a; 1. lock是一個接口&#xff0c;而synchronized是java的一個關鍵字&#xff0c;synchronized是內置的語言實現&#xff1b;&#xff08;具體實現上的區別在《Java虛擬機》中有講解底層的CAS不同&#xff0c;以前有讀過現在又遺忘了。&#xff09; 2. syn…

首頁顯示登陸用戶名php,首頁登錄后怎么在首頁顯示用戶名以及隱藏登錄框?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓index.php&#xff1a;登錄頁面用戶名&#xff1a;密碼&#xff1a;沒有賬號&#xff1f;立即注冊——————————————————————————doaction.php&#xff1a;header("Content-type:text/html;charsetutf…

react中使用構建緩存_通過在React中構建Tic Tac Toe來學習ReasonML

react中使用構建緩存3. 7. 2018: UPDATED to ReasonReact v0.4.23. 7. 2018&#xff1a;更新為ReasonReact v0.4.2 You may have heard of Reason before. It’s a syntax on top of OCaml that compiles to both readable JavaScript code and to native and bytecode as well…

echart vue 圖表大小_vue里echarts自適應窗口大小改變

echarts的圖表提供了一個resize方法可以自適應屏幕窗口改變&#xff0c;而重新渲染圖表大小的功能。因此我們只要監聽瀏覽器的窗口改變的resize事件&#xff0c;再結合echarts的圖表&#xff0c;就可以實現我們想要的功能了。如果是單個圖表的情況的話用window.onresize myCha…

用js檢測文本框中輸入的是否符合條件并有錯誤和正確提醒

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>捕獲異常</title></head><script type"text/javascript">function my_func(){try{xdocument.getElementById("input_id").value;ale…

leetcode784. 字母大小寫全排列(回溯)

給定一個字符串S&#xff0c;通過將字符串S中的每個字母轉變大小寫&#xff0c;我們可以獲得一個新的字符串。返回所有可能得到的字符串集合。 示例: 輸入: S “a1b2” 輸出: [“a1b2”, “a1B2”, “A1b2”, “A1B2”] 輸入: S “3z4” 輸出: [“3z4”, “3Z4”] 輸入: S…

Petapoco使用SQLite的異常問題

在DbProviderFactory 初始化時&#xff0c;報一個"System.Data.SQLite.SQLiteFactory”的類型初始值設定項引發異常。 解決&#xff1a;不光要引用System.Data.SQLite。還要把SQLite.Interop.dll添加到運行目錄下。轉載于:https://www.cnblogs.com/crazy29/p/7595552.html…

CPP函數調用的方法

相比于C語言中函數可以直接調用&#xff0c;CPP的函數由于命名存在隱式添加&#xff0c;因此需要通過一套流程才能調用&#xff1a; 1. 編碼中&#xff0c;使用extern "C" 定義一個C函數&#xff0c;返回獲取對象的指針&#xff1b;執行該函數時&#xff0c;獲得一個…

php 算法 二進制文件,關于PHP二進制流 逐bit的低位在前算法(詳解)_PHP教程

復制代碼 代碼如下:/******************************************************* 逐bit的低位在前算法* param $x* return int*/function reverse($x){$result 0;for($i 0; $i < 8; $i){$result ($result <> $i));}return $result & 0xff;}調用展示&#xff1a;…

頂尖科技棋牌游戲開發_如何接受頂尖科技公司的采訪

頂尖科技棋牌游戲開發If you’ve ever wondered how to land an interview with top tech companies or know someone who’s been struggling to get an interview with one, then this article is for you.如果您曾經想過如何與頂尖高科技公司進行面談&#xff0c;或者想知道…

城軌列控系統

關于列控系統想問的問題 1&#xff09;列控系統的組成&#xff1f; 2&#xff09;城軌列控系統和列控系統有哪些區別&#xff1f; 3&#xff09;列控系統的設備圖片&#xff1f; 4&#xff09;列控系統的作用&#xff1f; 1、地鐵的供電部分&#xff1a; 參考&#xff1a;http:…

Thinkphp 發送郵件

TP框架實現發送郵件&#xff0c;親測可用1.在模塊的配置文件config中加入下里面代碼THINK_EMAIL > array(SMTP_HOST > smtp.qq.com, //SMTP服務器SMTP_PORT > 465, //SMTP服務器端口SMTP_USER > 郵箱qq.com, //SMTP服務器用戶名SMTP_PASS > 密碼, //SMTP服務器密…

leetcode40. 組合總和 II(回溯)

給定一個數組 candidates 和一個目標數 target &#xff0c;找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的每個數字在每個組合中只能使用一次。 說明&#xff1a; 所有數字&#xff08;包括目標數&#xff09;都是正整數。 解集不能包含重復的組合…

python 面部識別_一文教你在Python中打造你自己專屬的面部識別系統

原標題&#xff1a;一文教你在Python中打造你自己專屬的面部識別系統人臉識別是用戶身份驗證的最新趨勢。蘋果推出的新一代iPhone X使用面部識別技術來驗證用戶身份。百度也在使“刷臉”的方式允許員工進入辦公室。對于很多人來說&#xff0c;這些應用程序有一種魔力。但在這篇…

Computer Vision Review Incompletely

機器視覺牛人及其相關領域分類科普轉載于:https://www.cnblogs.com/casperwin/p/6380484.html

php獲取特殊標簽,thinkphp特殊標簽使用

特殊標簽1、比較標簽eq或者 equal 等于neq 或者notequal 不等于gt 大于egt 大于等于lt 小于elt 小于等于heq 恒等于nheq 不恒等于2.范圍標簽in(in namen value9,10,11,12)在這些數字里面(else/)不在這些數字的范圍內(/in)(notin namen value9,10,11,12)在這些數字里面(else/)不…

leetcode面試題 08.08. 有重復字符串的排列組合(回溯)

有重復字符串的排列組合。編寫一種方法&#xff0c;計算某字符串的所有排列組合。 示例1: 輸入&#xff1a;S “qqe” 輸出&#xff1a;[“eqq”,“qeq”,“qqe”] 示例2: 輸入&#xff1a;S “ab” 輸出&#xff1a;[“ab”, “ba”] 代碼 class Solution {ArrayList&l…