PHP-Crawl-Website-Bildskript
Jul 29, 2016 am 09:14 AMMethode 1:
<code><span><?php</span> header(<span>"Content-type:image/jpeg"</span>); <span><span>class</span><span>download_image</span>{</span><span><span>function</span><span>read_url</span><span>(<span>$str</span>)</span> {</span><span>$file</span>=fopen(<span>$str</span>,<span>"r"</span>); <span>$result</span> = <span>''</span>; <span>while</span>(!feof(<span>$file</span>)) { <span>$result</span>.=fgets(<span>$file</span>,<span>9999</span>); } fclose(<span>$file</span>); <span>return</span><span>$result</span>; } <span><span>function</span><span>save_img</span><span>(<span>$str</span>)</span> {</span><span>$result</span>=<span>$this</span>->read_url(<span>$str</span>); <span>$result</span>=str_replace(<span>"\""</span>,<span>""</span>,<span>$result</span>); <span>$result</span>=str_replace(<span>"\'"</span>,<span>""</span>,<span>$result</span>); preg_match_all(<span>'/<img\ssrc=(http:\/\/.*?)(\s(.*?)>|>)/i'</span>,<span>$result</span>,<span>$matches</span>); <span>foreach</span>(<span>$matches</span>[<span>1</span>] <span>as</span><span>$value</span>) { <span>echo</span><span>$value</span>.<span>"\n"</span>; <span>$this</span>->GrabImage(<span>$value</span>,<span>$filename</span>=<span>""</span>); } } <span>// $url 是遠(yuǎn)程圖片的完整URL地址,不能為空。 </span><span>// $filename 是可選變量: 如果為空,本地文件名將基于時(shí)間和日期 </span><span>// 自動生成. </span><span><span>function</span><span>GrabImage</span><span>(<span>$url</span>,<span>$filename</span>=<span>""</span>)</span> {</span><span>if</span>(<span>$url</span>==<span>""</span>):<span>return</span><span>false</span>;<span>endif</span>; <span>$path</span>=<span>"download/"</span>; <span>//指定存儲文件夾 </span><span>//若文件不存在,則創(chuàng)建; </span><span>if</span>(!file_exists(<span>$path</span>)){ mkdir(<span>$path</span>); } <span>if</span>(<span>$filename</span>==<span>""</span>) { <span>$ext</span>=strrchr(<span>$url</span>,<span>"."</span>); <span>if</span>(<span>$ext</span>!=<span>".gif"</span> && <span>$ext</span>!=<span>".jpg"</span>):<span>return</span><span>false</span>;<span>endif</span>; @<span>$filename</span>=<span>$path</span>.date(<span>"YHis"</span>).<span>$ext</span>; } ob_start(); readfile(<span>$url</span>); <span>$img</span> = ob_get_contents(); ob_end_clean(); <span>$size</span> = strlen(<span>$img</span>); <span>$fp2</span>=@fopen(<span>$filename</span>, <span>"a"</span>); fwrite(<span>$fp2</span>,<span>$img</span>); fclose(<span>$fp2</span>); <span>return</span><span>$filename</span>; } } <span>$download_img</span>=<span>new</span> download_image(); <span>$download_img</span>->save_img(<span>"http://www.jb51.net"</span>); <span>?></span></span></code>
Methode 1 hat eine relativ einfache und klare Idee, aber es gibt einen Fehler, das Bild wird nicht vollst?ndig erfasst, bitte überprüfen Sie es noch einmal, wenn Sie Zeit haben !
Methode 2:
<code><span><span><?php</span><span><span>class</span><span>download_image</span>{</span><span>//抓取圖片的保存地址</span><span>public</span><span>$save_path</span>; <span>//抓取圖片的大小限制(單位:字節(jié)) 只抓比size比這個限制大的圖片</span><span>public</span><span>$img_size</span>=<span>0</span>; <span>//定義一個靜態(tài)數(shù)組,用于記錄曾經(jīng)抓取過的的超鏈接地址,避免重復(fù)抓取 </span><span>public</span><span>static</span><span>$a_url_arr</span>=<span>array</span>(); <span>/** *<span> @param</span> String $save_path 抓取圖片的保存地址 *<span> @param</span> Int $img_size */</span><span>public</span><span><span>function</span><span>__construct</span><span>(<span>$save_path</span>,<span>$img_size</span>)</span>{</span><span>$this</span>->save_path=<span>$save_path</span>; <span>$this</span>->img_size=<span>$img_size</span>; <span>if</span>(!file_exists(<span>$save_path</span>)){ mkdir(<span>$save_path</span>,<span>0775</span>); } } <span>/** * 遞歸下載抓取首頁及其子頁面圖片的方法 ( recursive 遞歸) *<span> @param</span> String $capture_url 用于抓取圖片的網(wǎng)址 */</span><span>public</span><span><span>function</span><span>recursive_download_images</span><span>(<span>$capture_url</span>)</span>{</span><span>if</span> (!in_array(<span>$capture_url</span>,<span>self</span>::<span>$a_url_arr</span>)){ <span>//沒抓取過</span><span>self</span>::<span>$a_url_arr</span>[]=<span>$capture_url</span>; <span>//計(jì)入靜態(tài)數(shù)組</span> } <span>else</span> { <span>//抓取過,直接退出函數(shù)</span><span>return</span>; } <span>$this</span>->download_current_page_images(<span>$capture_url</span>); <span>//下載當(dāng)前頁面的所有圖片</span><span>//用@屏蔽掉因?yàn)樽ト〉刂窡o法讀取導(dǎo)致的warning錯誤</span><span>$content</span>=@file_get_contents(<span>$capture_url</span>); <span>//匹配<strong>a標(biāo)簽</strong>href屬性中?之前部分的正則</span><span>$a_pattern</span> = <span>"|<a[^>]+href=['\" ]?([^ '\"?]+)['\" >]|U"</span>; preg_match_all(<span>$a_pattern</span>, <span>$content</span>, <span>$a_out</span>, PREG_SET_ORDER); <span>$tmp_arr</span>=<span>array</span>(); <span>//定義一個數(shù)組,用于存放當(dāng)前<strong>循環(huán)</strong>下抓取圖片的超鏈接地址</span><span>foreach</span> (<span>$a_out</span><span>as</span><span>$k</span> => <span>$v</span>) { <span>/** * 去除超鏈接中的 空'','#','/'和重復(fù)值 * 1: 超鏈接地址的值 不能等于當(dāng)前抓取頁面的url, 否則會陷入死<strong>循環(huán)</strong> * 2: 超鏈接為''或'#','/'也是本頁面,這樣也會陷入死<strong>循環(huán)</strong>, * 3: 有時(shí)一個超連接地址在一個網(wǎng)頁中會重復(fù)出現(xiàn)多次,如果不去除,會對一個子頁面進(jìn)行重復(fù)下載) */</span><span>if</span> ( <span>$v</span>[<span>1</span>] && !in_array(<span>$v</span>[<span>1</span>],<span>self</span>::<span>$a_url_arr</span>) &&!in_array(<span>$v</span>[<span>1</span>],<span>array</span>(<span>'#'</span>,<span>'/'</span>,<span>$capture_url</span>) ) ) { <span>$tmp_arr</span>[]=<span>$v</span>[<span>1</span>]; } } <span>foreach</span> (<span>$tmp_arr</span><span>as</span><span>$k</span> => <span>$v</span>){ <span>//超鏈接路徑地址</span><span>if</span> ( strpos(<span>$v</span>, <span>'http://'</span>)!==<span>false</span> ){ <span>//如果url包含http://,可以直接訪問</span><span>$a_url</span> = <span>$v</span>; }<span>else</span>{ <span>//否則證明是相對地址, 需要重新拼湊超鏈接的訪問地址</span><span>$domain_url</span> = substr(<span>$capture_url</span>, <span>0</span>,strpos(<span>$capture_url</span>, <span>'/'</span>,<span>8</span>)+<span>1</span>); <span>$a_url</span>=<span>$domain_url</span>.<span>$v</span>; } <span>$this</span>->recursive_download_images(<span>$a_url</span>); } } <span>/** * 下載當(dāng)前網(wǎng)頁下的所有圖片 *<span> @param</span> String $capture_url 用于抓取圖片的網(wǎng)頁地址 *<span> @return</span> Array 當(dāng)前網(wǎng)頁上所有圖片img標(biāo)簽url地址的一個數(shù)組 */</span><span>public</span><span><span>function</span><span>download_current_page_images</span><span>(<span>$capture_url</span>)</span>{</span><span>$content</span>=@file_get_contents(<span>$capture_url</span>); <span>//屏蔽warning錯誤</span><span>//匹配img標(biāo)簽src屬性中?之前部分的正則</span><span>$img_pattern</span> = <span>"|<img[^>]+src=['\" ]?([^ '\"?]+)['\" >]|U"</span>; preg_match_all(<span>$img_pattern</span>, <span>$content</span>, <span>$img_out</span>, PREG_SET_ORDER); <span>$photo_num</span> = count(<span>$img_out</span>); <span>//匹配到的圖片數(shù)量</span><span>echo</span><span>$capture_url</span> . <span>"共找到 "</span> . <span>$photo_num</span> . <span>" 張圖片\n"</span>; <span>foreach</span> (<span>$img_out</span><span>as</span><span>$k</span> => <span>$v</span>){ <span>$this</span>->save_one_img(<span>$capture_url</span>,<span>$v</span>[<span>1</span>]); } } <span>/** * 保存單個圖片的方法 *<span> @param</span> String $capture_url 用于抓取圖片的網(wǎng)頁地址 *<span> @param</span> String $img_url 需要保存的圖片的url */</span><span>public</span><span><span>function</span><span>save_one_img</span><span>(<span>$capture_url</span>,<span>$img_url</span>)</span>{</span><span>//圖片路徑地址</span><span>if</span> ( strpos(<span>$img_url</span>, <span>'http://'</span>)!==<span>false</span> ){ <span>// $img_url = $img_url;</span> }<span>else</span>{ <span>$domain_url</span> = substr(<span>$capture_url</span>, <span>0</span>,strpos(<span>$capture_url</span>, <span>'/'</span>,<span>8</span>)+<span>1</span>); <span>$img_url</span>=<span>$domain_url</span>.<span>$img_url</span>; } <span>$pathinfo</span> = pathinfo(<span>$img_url</span>); <span>//獲取圖片路徑信息 </span><span>$pic_name</span>=<span>$pathinfo</span>[<span>'basename'</span>]; <span>//獲取圖片的名字</span><span>if</span> (file_exists(<span>$this</span>->save_path.<span>$pic_name</span>)){ <span>//如果圖片存在,證明已經(jīng)被抓取過,退出函數(shù)</span><span>echo</span><span>$img_url</span>.<span>'該圖片已經(jīng)抓取過!'</span>.<span>"\n"</span>; <span>return</span>; } <span>//將圖片內(nèi)容讀入一個字符串</span><span>$img_data</span> = @file_get_contents(<span>$img_url</span>); <span>//屏蔽掉因?yàn)閳D片地址無法讀取導(dǎo)致的warning錯誤</span><span>if</span> ( strlen(<span>$img_data</span>) > <span>$this</span>->img_size ){ <span>//下載size比限制大的圖片</span><span>$img_size</span> = file_put_contents(<span>$this</span>->save_path . <span>$pic_name</span>, <span>$img_data</span>); <span>if</span> (<span>$img_size</span>){ <span>echo</span><span>$img_url</span>.<span>'圖片保存成功!'</span>.<span>"\n"</span>; } <span>else</span> { <span>echo</span><span>$img_url</span>.<span>'圖片保存失敗!'</span>.<span>"\n"</span>; } } <span>else</span> { <span>echo</span><span>$img_url</span>.<span>'圖片讀取失敗!'</span>.<span>"\n"</span>; } } } set_time_limit(<span>120</span>); <span>//設(shè)置腳本的最大執(zhí)行時(shí)間 根據(jù)情況設(shè)置 </span><span>$download_img</span>=<span>new</span> download_image(<span>'imgages/'</span>,<span>0</span>); <span>//實(shí)例化下載圖片<strong>對象</strong></span><span>//$download_img->recursive_download_images('http://www.oschina.net/'); //遞歸抓取圖片方法</span><span>//$download_img->download_current_page_images($_POST['capture_url']); //只抓取當(dāng)前頁面圖片方法</span><span>$download_img</span>->download_current_page_images(<span>'http://www.jb51.net'</span>); <span>//只抓取當(dāng)前頁面圖片方法</span><span>?></span></span></span></code>
http://blog.csdn.net/china_skag/article/details/18452883
http://www.jb51.net/article/21738.htm
Urheberrechtserkl?rung: Bitte bewahren Sie die Signatur und den Link des Artikels beim Nachdruck auf
Das Obige stellt das PHP-Skript zum Erfassen von Website-Bildern vor, einschlie?lich der relevanten Inhalte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Zu den Methoden zum ?ffnen von IMG-Dateien geh?ren die Verwendung von Software für virtuelle optische Laufwerke, die Verwendung von Komprimierungssoftware und die Verwendung spezieller Tools. Detaillierte Einführung: 1. Verwenden Sie die Software für virtuelle optische Laufwerke, um eine Software für virtuelle optische Laufwerke zu ?ffnen, herunterzuladen und zu installieren. Klicken Sie mit der rechten Maustaste auf die IMG-Datei, w?hlen Sie ??ffnen mit“ oder ?Zugeh?riges Programm“ und w?hlen Sie im Popup die installierte Software für virtuelle optische Laufwerke aus -up-Dialogfeld, virtuell Die Software des optischen Laufwerks l?dt die IMG-Datei automatisch und verwendet sie als Disc-Image im virtuellen optischen Laufwerk. Doppelklicken Sie auf das Disc-Symbol im virtuellen optischen Laufwerk, um die IMG-Datei zu ?ffnen und auf deren Inhalt zuzugreifen. usw.

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Aufl?sung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der L?sungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt m?glicherweise mehrere M?glichkeiten, diesen Fehler zu beheben: überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zug?nglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie k?nnen es mit dem Befehl ?ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

Heutzutage haben viele Windows-Benutzer, die Spiele lieben, den Steam-Client aufgerufen und k?nnen alle guten Spiele suchen, herunterladen und spielen. Allerdings haben die Profile vieler Benutzer m?glicherweise genau denselben Namen, was es schwierig macht, ein Profil zu finden oder sogar ein Steam-Profil mit anderen Konten von Drittanbietern zu verknüpfen oder Steam-Foren beizutreten, um Inhalte zu teilen. Dem Profil wird eine eindeutige 17-stellige ID zugewiesen, die gleich bleibt und vom Benutzer zu keinem Zeitpunkt ge?ndert werden kann, der Benutzername oder die benutzerdefinierte URL hingegen schon. Unabh?ngig davon kennen einige Benutzer ihr Steamid nicht und es ist wichtig, dies zu wissen. Wenn Sie nicht wissen, wie Sie das Steamid Ihres Kontos finden, geraten Sie nicht in Panik. In diesem Artikel

Einführung in die PHP-Funktion – get_headers(): überblick über das Abrufen der Antwort-Header-Informationen der URL: In der PHP-Entwicklung müssen wir h?ufig die Antwort-Header-Informationen einer Webseite oder einer Remote-Ressource abrufen. Die PHP-Funktion get_headers() kann problemlos die Antwortheaderinformationen der Ziel-URL abrufen und in Form eines Arrays zurückgeben. In diesem Artikel wird die Verwendung der Funktion get_headers() vorgestellt und einige zugeh?rige Codebeispiele bereitgestellt. Verwendung der Funktion get_headers(): get_header

Unterschiede: 1. Unterschiedliche Definitionen, URL ist ein einheitlicher Ressourcen-Locator und HTML ist eine Hypertext-Markup-Sprache. 2. Es kann viele URLs in einer HTML-Seite geben, aber nur eine HTML-Seite kann in einer URL vorhanden sein eine Webseite, und URL bezieht sich auf die Website-Adresse.

So legen Sie die Umgebungsvariable PATH in Linux-Systemen fest. In Linux-Systemen wird die Umgebungsvariable PATH verwendet, um den Pfad anzugeben, in dem das System in der Befehlszeile nach ausführbaren Dateien sucht. Durch die korrekte Einstellung der Umgebungsvariablen PATH k?nnen wir Systembefehle und benutzerdefinierte Befehle an jedem Ort ausführen. In diesem Artikel wird erl?utert, wie die Umgebungsvariable PATH in einem Linux-System festgelegt wird, und es werden detaillierte Codebeispiele bereitgestellt. Zeigen Sie die aktuelle PATH-Umgebungsvariable an. Führen Sie den folgenden Befehl im Terminal aus, um die aktuelle PATH-Umgebungsvariable anzuzeigen: echo$P

So ?ffnen Sie die IMG-Datei: 1. Best?tigen Sie den IMG-Datei?ffner. 3. W?hlen Sie die ?ffnungsmethode. 5. Speichern Sie das Bild. Die IMG-Datei ist ein h?ufig verwendetes Bilddateiformat, das normalerweise zum Speichern von Bilddaten verwendet wird.

img ist ein Dateikomprimierungsformat, das haupts?chlich zum Erstellen von Disketten-Image-Dateien verwendet wird. Es kann zum Komprimieren des Inhalts einer gesamten Diskette oder einer gesamten CD verwendet werden. Die IMG-Datei enth?lt drei grundlegende Knoten, n?mlich ?Ehfa_HeaderTag“, ?Ehfa_File“ und ?Ehfa_Entry“.
