Blog-Crawling-System
Aug 08, 2016 am 09:30 AMEinführung
Ich hatte am Wochenende nichts zu tun und war gelangweilt, also habe ich ein Blog-Crawling-System mit PHP erstellt. Natürlich besuche ich Cnblogs (sehen Sie, ich mag den Blog-Park immer noch). Mein Crawling-Vergleich Einfach: Rufen Sie den Inhalt der Webseite ab, verwenden Sie dann den regul?ren Abgleich, um das zu erhalten, was Sie m?chten, und speichern Sie dann die Datenbank. Natürlich werden Sie im eigentlichen Prozess auf einige Probleme sto?en. Ich habe vorher darüber nachgedacht und m?chte, dass es erweiterbar ist. Wenn ich in Zukunft csdn, 51cto, Sina-Blog und andere Inhalte hinzufügen m?chte, kann es problemlos erweitert werden.
Diese Dinge k?nnen geschnappt werden?
Zun?chst m?chte ich etwas sagen. Nicht alles, was Sie auf der Webseite sehen, kann nicht gecrawlt werden, wie zum Beispiel das Folgende
Ideen zum Krabbeln
Lassen Sie uns zun?chst über die Kriechtiefe sprechen
Wenn Sie einen Link zum Crawlen bestimmter Inhalte verwenden, sind die Dinge, die Sie crawlen k?nnen, natürlich sehr begrenzt, oder Sie sterben m?glicherweise vor dem Crawlen (die nachfolgenden Ebenen stimmen nicht mit dem Inhalt überein). Sie k?nnen also beim Crawlen mehrere Starts festlegen Links beim Abrufen. Natürlich ist es wahrscheinlich, dass Sie beim Crawlen auf viele doppelte Links sto?en. Daher müssen Sie die gecrawlten Links markieren, um zu verhindern, dass derselbe Inhalt wiederholt erfasst wird, was zu Redundanz führt. Es gibt mehrere Variablen zum Zwischenspeichern dieser Informationen. Das Format ist wie folgt:Beginnen Sie zum Beispiel mit dem Crawlen von Link a. Wenn die Tiefe 1 ist, holen Sie sich einfach den Inhalt des aktuellen Links. Wenn die Tiefe 2 ist, passen Sie den Link gem?? den angegebenen Regeln an den Inhalt des Links an a. Der übereinstimmende Link wird ebenfalls mit einer Tiefe von 1 verarbeitet, und so weiter. Tiefe ist die Tiefe und Ebene des Links. Nur so kann der Crawler ?kriechen“.
Erstens handelt es sich um ein Hash-Array, der Schlüsselwert ist der MD5-Wert der URL, der Status ist 0, ein eindeutiges URL-Array wird in der folgenden Form verwaltet
<span>Array</span><span> ( [bc790cda87745fa78a2ebeffd8b48145] </span>=> 0<span> [9868e03f81179419d5b74b5ee709cdc2] </span>=> 0<span> [4a9506d20915a511a561be80986544be] </span>=> 0<span> [818bcdd76aaa0d41ca88491812559585] </span>=> 0<span> [9433c3f38fca129e46372282f1569757] </span>=> 0<span> [f005698a0706284d4308f7b9cf2a9d35] </span>=> 0<span> [e463afcf13948f0a36bf68b30d2e9091] </span>=> 0<span> [23ce4775bd2ce9c75379890e84fadd8e] </span>=> 0 ......<span> )</span>
Es gibt auch eine regelm??ige Regel für die Beschaffung von Artikeln im Blogpark. Durch die Analyse des Inhalts von Artikeln im Blogpark wurde festgestellt, dass der Titel und der Textk?rper des Artikels grunds?tzlich sehr regelm??ig abgerufen werden k?nnenDas zweite ist das abzurufende URL-Array. Hier kann ich auch alle Links in das Array abrufen und dann das Array durchlaufen, um den Inhalt zu erhalten Die maximale Tiefe aller Inhalte minus 1 wurde zweimal abgerufen. Hier k?nnen Sie den Inhalt direkt abrufen, wenn Sie den Inhalt der n?chsten Ebene abrufen, und dann den Status im obigen Array auf 1 (bereits erhalten) ?ndern, was die Effizienz verbessern kann. Schauen Sie sich zun?chst den Inhalt des Arrays an, das den Link speichert:
<span>Array</span><span> ( [</span>0] => <span>Array</span><span> ( [</span>0] => http:<span>//</span><span>zzk.cnblogs.com/s?t=b&w=php&p=1</span> <span> ) [</span>1] => <span>Array</span><span> ( [</span>0] => http:<span>//</span><span>www.cnblogs.com/baochuan/archive/2012/03/12/2391135.html</span> [1] => http:<span>//</span><span>www.cnblogs.com/ohmygirl/p/internal-variable-1.html</span> [2] => http:<span>//</span><span>www.cnblogs.com/zuoxiaolong/p/java1.html</span> ......<span> ) [</span>2] => <span>Array</span><span> ( [</span>0] => http:<span>//</span><span>www.cnblogs.com/ohmygirl/category/623392.html</span> [1] => http:<span>//</span><span>www.cnblogs.com/ohmygirl/category/619019.html</span> [2] => http:<span>//</span><span>www.cnblogs.com/ohmygirl/category/619020.html</span> ......<span> ) )</span>Schlie?lich werden alle Links in einem Array zusammengefasst und zurückgegeben, und das Programm führt eine Schleife aus, um den Inhalt der Verbindung abzurufen. Genauso wie die obige Erfassungsebene 2 ist, wurde der Linkinhalt der Ebene 0 erfasst und nur zum Abrufen der Links der Ebene 1 verwendet. Der gesamte Linkinhalt der Ebene 1 wurde ebenfalls erfasst und wird nur dazu verwendet Speichern Sie die Links auf Ebene 2. Wenn der Inhalt tats?chlich abgerufen wird, wird der obige Inhalt erneut abgerufen und der Status im obigen Hash-Array wird nicht verwendet. . . (Zu optimieren).
Der Titel und der Titel-HTML-Code haben das unten gezeigte Format. Sie k?nnen problemlos mit dem folgenden regul?ren Ausdruck abgleichen.
<span>#</span><span><a\s*?id=\"cb_post_title_url\"[^>]*?>(.*?)<\/a>#is</span>
Der Haupttext, der Haupttextteil, kann leicht über die Balance-Gruppe regul?rer Ausdrücke mit erweiterten Funktionen abgerufen werden. Nach langer Arbeit stellte ich jedoch fest, dass PHP die Balance-Gruppe anscheinend nicht sehr gut unterstützt Deshalb habe ich die Bilanzgruppe aufgegeben und hinzugefügt. Im HTML-Quellcode wurde festgestellt, dass der Inhalt des Artikelk?rpers durch die folgenden regul?ren Regeln leicht abgeglichen werden kann. Jeder Artikel hat grunds?tzlich den Inhalt im Bild unten
<span>#</span><span>(<div\s*?id=\"cnblogs_post_body\"[^>]*?>.*)<div\s*id=\"blog_post_info_block\">#is</span>
Start:
Ende:
![]()
![]()
博客的發(fā)布時(shí)間也是可以獲取到的,但有些文章在獲取發(fā)布時(shí)間的時(shí)候可能會(huì)找不到,這個(gè)就不列在這里了,有了這些東西就可以爬取內(nèi)容了。
開(kāi)始爬取
開(kāi)始爬取內(nèi)容了,最初我設(shè)置的爬取深度是2級(jí),初始頁(yè)面是博客園首頁(yè),發(fā)現(xiàn)爬取不了多少內(nèi)容,后來(lái)發(fā)現(xiàn)博客園首頁(yè)有個(gè)頁(yè)碼導(dǎo)航
就試圖拼接成頁(yè)碼格式http://www.cnblogs.com/#p2,循環(huán)200次,以每頁(yè)為起始頁(yè)面,深度為2去抓取。但我高興的太早了,開(kāi)了幾個(gè)進(jìn)程跑了好久程序,抓了幾十萬(wàn)條,后來(lái)發(fā)現(xiàn)完全在重復(fù),都是從第一頁(yè)中抓取的,因?yàn)椴┛蛨@首頁(yè)點(diǎn)擊導(dǎo)航的時(shí)候(除了第一頁(yè)),都是ajax請(qǐng)求獲取到的。。。。看來(lái)博客園還是考慮到這個(gè)問(wèn)題,因?yàn)榇蠖鄶?shù)人都是只打開(kāi)首頁(yè),不會(huì)去點(diǎn)擊后面的內(nèi)容(我可能偶爾會(huì)去點(diǎn)擊下一頁(yè)),所以為了在防止初級(jí)抓取者去抓取和性能發(fā)面做權(quán)衡,將第一頁(yè)設(shè)置為靜態(tài)網(wǎng)頁(yè)的方式,緩存有效期是幾分鐘(或者是根據(jù)跟新頻率,當(dāng)更新多少篇的時(shí)候去更新緩存,或者兩者的結(jié)合),這也是為什么有時(shí)候發(fā)布的文章,過(guò)一會(huì)兒才會(huì)顯示出來(lái)的原因(我猜的^_^)。
難道不能一次性抓取很多內(nèi)容嗎?后來(lái)我發(fā)現(xiàn)這個(gè)地方使用的全部是靜態(tài)網(wǎng)頁(yè)
???? 從找找看這個(gè)地方獲取到的內(nèi)容都是靜態(tài)的,包括最下面的導(dǎo)航鏈接中的所有頁(yè)面都是靜態(tài)的,而且,這個(gè)搜索右邊還有篩選條件,可以更好的提高抓取的質(zhì)量。好了有了這個(gè)入口,就可以獲取到好多高質(zhì)量的文章了,下面是循環(huán)抓取100頁(yè)的代碼
<span>for</span>(<span>$i</span>=1;<span>$i</span><=100;<span>$i</span>++<span>){ </span><span>echo</span> "PAGE{<span>$i</span>}*************************[begin]***************************\r"<span>; </span><span>$spidercnblogs</span> = <span>new</span> C\Spidercnblogs("http://zzk.cnblogs.com/s?t=b&w=php&p={$i}"<span>); </span><span>$urls</span> = <span>$spidercnblogs</span>-><span>spiderUrls(); </span><span>die</span><span>(); </span><span>foreach</span> (<span>$urls</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) { </span><span>$cnblogs</span>->grap(<span>$value</span><span>); </span><span>$cnblogs</span>-><span>save(); } }</span>
至此,就可以去抓去自己喜歡的東西了,抓取速度不是很快,我在一臺(tái)普通pc上面開(kāi)了10個(gè)進(jìn)程,抓了好幾個(gè)小時(shí),才獲取到了40多萬(wàn)條數(shù)據(jù),好了看看抓取到的內(nèi)容稍微優(yōu)化之后的顯示效果,這里面加上了博客園的基礎(chǔ)css代碼,可以看出效果和
抓取到的內(nèi)容稍作修改:
原始內(nèi)容
?
再看下文件目錄結(jié)構(gòu),也是用上篇的自制目錄生成工具生成的:
?+myBlogs-master
????+controller
????????|_Blog.php
????????|_Blogcnblogs.php
????????|_Spider.php
????????|_Spidercnblogs.php
????+core
????????|_Autoload.php
????+interface
????????|_Blog.php
????+lib
????????|_Mysql.php
????+model
????????|_Blog.php
????|_App.php
效果還是很不錯(cuò)的,這里再猜下推酷這種專(zhuān)門(mén)爬取的網(wǎng)站的工作方式,一個(gè)常駐進(jìn)程,隔一段時(shí)間去獲取一次內(nèi)容(比如說(shuō)首頁(yè)),如果有新鮮的內(nèi)容入庫(kù),沒(méi)有的話(huà)放棄這次獲取的內(nèi)容,等待下次獲取,當(dāng)時(shí)間很小的時(shí)候就可以一篇不漏的抓取的”新鮮“的內(nèi)容。
這是github地址:
github——myBlogs
本文版權(quán)歸作者iforever(luluyrt@163.com)所有,未經(jīng)作者本人同意禁止任何形式的轉(zhuǎn)載,轉(zhuǎn)載文章之后必須在文章頁(yè)面明顯位置給出作者和原文連接,否則保留追究法律責(zé)任的權(quán)利。
以上就介紹了博客爬取系統(tǒng),包括了方面的內(nèi)容,希望對(duì)PHP教程有興趣的朋友有所幫助。

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)

Benutzerspracheingabe wird erfasst und über die Mediarecorder-API des Front-End-JavaScript an das PHP-Backend gesendet. 2. PHP speichert das Audio als tempor?re Datei und ruft STTAPI (z. B. Google oder Baidu Voiceerkennung) auf, um sie in Text umzuwandeln. 3. PHP sendet den Text an einen KI -Dienst (wie OpenAigpt), um intelligente Antwort zu erhalten. 4. PHP ruft dann TTSAPI (wie Baidu oder Google Voice -Synthese) auf, um die Antwort in eine Sprachdatei umzuwandeln. 5. PHP streams die Sprachdatei zurück zum Spielen, um die Interaktion abzuschlie?en. Der gesamte Prozess wird von PHP dominiert, um eine nahtlose Verbindung zwischen allen Links zu gew?hrleisten.

Die Kernmethode zum Aufbau sozialer Freigabefunktionen in PHP besteht darin, dynamisch Freigabelinks zu generieren, die den Anforderungen jeder Plattform entsprechen. 1. Erhalten Sie zuerst die aktuelle Seite oder die angegebenen URL- und Artikelinformationen. 2. Verwenden Sie Urlencode, um die Parameter zu codieren. 3.. Splei? und generieren Teilenverbindungen gem?? den Protokollen jeder Plattform; 4. Zeigen Sie Links im vorderen Ende an, damit Benutzer klicken und freigeben k?nnen. 5. generieren Sie Dynamik OG -Tags auf der Seite, um die Anzeige der Freigabe inhaltlich zu optimieren. 6. Achten Sie darauf, dass Sie den Benutzereingaben entkommen, um XSS -Angriffe zu verhindern. Diese Methode erfordert keine komplexe Authentifizierung, weist nur geringe Wartungskosten auf und eignet sich für die meisten Anforderungen an den Inhaltsaustausch.

Um die Textfehlerkorrektur und die Syntaxoptimierung mit AI zu realisieren, müssen Sie die folgenden Schritte ausführen: 1. W?hlen Sie ein geeignetes AI -Modell oder ein geeignetes AI -Modell oder ein geeignetes AI -Modell wie Baidu, Tencent API oder Open Source NLP -Bibliothek aus; 2. Rufen Sie die API über die Curl oder das Guzzle von PHP auf und verarbeiten Sie die Rückgabeergebnisse. 3.. Informationen zur Fehlerkorrektur in der Anwendung anzeigen und erm?glichen den Benutzern, zu w?hlen, ob sie angenommen werden sollen. 4. Verwenden Sie PHP-L und PHP_CODESNIFFER für die Syntaxerkennung und -codeoptimierung. 5. sammeln Sie kontinuierlich Feedback und aktualisieren Sie das Modell oder die Regeln, um den Effekt zu verbessern. Konzentrieren Sie sich bei der Auswahl von AIAPI auf die Bewertung von Genauigkeit, Reaktionsgeschwindigkeit, Preis und Unterstützung für PHP. Die Codeoptimierung sollte den PSR -Spezifikationen folgen, Cache vernünftigerweise verwenden, zirkul?re Abfragen vermeiden, den Code regelm??ig überprüfen und x verwenden

1. Maximierung des kommerziellen Wertes des Kommentarsystems erfordert die Kombination der pr?zisen Lieferung native Werbung, benutzerbezahlte Wertsch?pfungsdienste (z. B. Bilder hochladen, Aufladungskommentare), den Incentive-Mechanismus basierend auf der Qualit?t der Kommentare und der Anonymen Daten Insight-Monetarisierung von Compliance; 2. Die Prüfungsstrategie sollte eine Kombination aus dynamischer Keyword-Filterung und Benutzerkennungsmechanismen vorab der Auditing einsetzen, die durch die Qualit?t der Kommentarqualit?t erg?nzt werden, um die hierarchische Inhaltsbelastung zu erreichen. 3. Die Anti-Pushing erfordert die Konstruktion einer mehrschichtigen Verteidigung: Recaptchav3 sensorlose überprüfung, Honeypot-Honeypot-Feldkennungroboter, IP und Zeitstempelfrequenzgrenze verhindert die Bew?sserung, und die Erkennung von Inhalten markiert verd?chtige Kommentare und st?ndig mit Angriffen.

PHP führt nicht direkt die KI-Image-Verarbeitung durch, sondern integriert sich über APIs, da es in der Webentwicklung und nicht in Bezug auf Computerintensive Aufgaben gut ist. Die API -Integration kann die professionelle Arbeitsteilung erreichen, die Kosten senken und die Effizienz verbessern. 2. Integration von Schlüsseltechnologien umfasst die Verwendung von Guzzle oder Curl zum Senden von HTTP-Anforderungen, JSON-Datencodierung und -decodierung, API-Schlüsselsicherheitsauthentifizierung, asynchroner Warteschlangenverarbeitungsaufgaben, robuster Fehlerbehebung und Wiederholungsmechanismus, Bildspeicherung und Anzeige. 3. Die gemeinsamen Herausforderungen sind API -Kosten au?er Kontrolle, unkontrollierbare Erzeugungsergebnisse, schlechte Benutzererfahrung, Sicherheitsrisiken und schwieriges Datenmanagement. In den Antwortstrategien werden Benutzerquoten und -darstellungen festgelegt, die Auswahl von ProPT-Anleitungen und mehrfizierende Auswahl, asynchrone Benachrichtigungen und Fortschrittsaufforderungen, wichtige Speicher- und Inhaltsprüfungen sowie Cloud-Speicher vorhanden.

PHP sorgt für die Inventarabzugsatomizit?t durch Datenbanktransaktionen und Forupdate -Reihenschl?sser, um eine hohe gleichzeitige überverl?ssigkeit zu verhindern. 2. Multi-Plattform-Inventarkonsistenz h?ngt von zentraler Verwaltung und ereignisgesteuerter Synchronisation ab, die API/Webhook-Benachrichtigungen und Nachrichtenwarteschlangen kombiniert, um eine zuverl?ssige Datenübertragung sicherzustellen. 3. Der Alarmmechanismus sollte in verschiedenen Szenarien niedrige Lagerbest?nde, Null/Negativ -Inventar, unerwünschte Verkaufszyklen, Nachschubzyklen und abnormale Schwankungsstrategien festlegen und die Auswahl von Dingtalk, SMS oder E -Mail -Verantwortlichen gem?? der Dringlichkeit ausw?hlen, und die Alarminformationen müssen vollst?ndig und frei sein, um die Anpassung und die Vergewaltigungsreaktion zu erreichen.

PhpisstillrelevantinMoDernEnterpriseEnvironments.1.ModerPhp (7.xand8.x) Angebote, strenge, jitkompilation und moderne Syntax, machte ma?geschneiderte Foreiglableforlarge-ScaleApplikationen

W?hlen Sie den entsprechenden AI -Spracherkennungsdienst und integrieren Sie PHPSDK. 2. Verwenden Sie PHP, um FFMPEG aufzurufen, um Aufzeichnungen in API-geforderte Formate (z. B. WAV) umzuwandeln. 3. Laden Sie Dateien in Cloud -Speicher hoch und rufen Sie API Asynchrone Recognition auf. 4. Analysieren Sie JSON -Ergebnisse und organisieren Sie Text mithilfe der NLP -Technologie. 5. Word- oder Markdown -Dokumente generieren, um die Automatisierung der Besprechungsunterlagen abzuschlie?en. Der gesamte Prozess muss sicherstellen, dass die Datenverschlüsselung, die Zugriffskontrolle und die Einhaltung der Datenschutz und Sicherheit gew?hrleistet sind.
