国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial Blog-Crawling-System

Blog-Crawling-System

Aug 08, 2016 am 09:30 AM
gt http nbsp php

Einfü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

Darunter die Anzahl der Lesungen, Kommentare, Empfehlungen, Einw?nde, Kommentare ... Diese werden dynamisch durch den Aufruf von Ajax durch js abgerufen, sodass sie tats?chlich nicht in einem Satz ge?ffnet werden k?nnen Klicken Sie mit der rechten Maustaste, um den Quellcode anzuzeigen. Wenn Sie den mit Ajax gefüllten Inhalt crawlen m?chten, kann dies zu Problemen führen Ich habe zuvor einen Artikel gesehen. Laden Sie zuerst die Webseite über den Browser und filtern Sie dann das gesamte DOM (wie im Artikel erw?hnt, ist es natürlich auch m?glich, diese JS-Anfragen zu verbinden, aber das wird es). wahrscheinlich problematischer sein.

Ideen zum Krabbeln

Lassen Sie uns zun?chst über die Kriechtiefe sprechen

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“.

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:

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>

Das 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).

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?nnen

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教程有興趣的朋友有所幫助。

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
PHP nennt AI intelligente Sprachassistenten PHP Voice Interaction System Construction PHP nennt AI intelligente Sprachassistenten PHP Voice Interaction System Construction Jul 25, 2025 pm 08:45 PM

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.

So verwenden Sie PHP, um soziale Freigabefunktionen zu erstellen. PHP Sharing Interface Integration Practice So verwenden Sie PHP, um soziale Freigabefunktionen zu erstellen. PHP Sharing Interface Integration Practice Jul 25, 2025 pm 08:51 PM

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.

So verwenden Sie PHP in Kombination mit AI, um die Erkennung und Optimierung der Textfehlerkorrektur PHP -Syntax zu erreichen So verwenden Sie PHP in Kombination mit AI, um die Erkennung und Optimierung der Textfehlerkorrektur PHP -Syntax zu erreichen Jul 25, 2025 pm 08:57 PM

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

PHP erstellt ein Blog-Kommentarsystem zur Monetarisierung von PHP-Kommentarbewertung und Anti-Brush-Strategie PHP erstellt ein Blog-Kommentarsystem zur Monetarisierung von PHP-Kommentarbewertung und Anti-Brush-Strategie Jul 25, 2025 pm 08:27 PM

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.

So verwenden Sie PHP, um KI zu kombinieren, um Bild zu generieren. PHP generiert automatisch Kunstwerke So verwenden Sie PHP, um KI zu kombinieren, um Bild zu generieren. PHP generiert automatisch Kunstwerke Jul 25, 2025 pm 07:21 PM

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 realisiert Rohstoffbestandsverwaltung und Monetarisierung PHP -Inventarsynchronisation und Alarmmechanismus PHP realisiert Rohstoffbestandsverwaltung und Monetarisierung PHP -Inventarsynchronisation und Alarmmechanismus Jul 25, 2025 pm 08:30 PM

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.

Jenseits des Lampenstacks: Rolle von PHP in der modernen Enterprise -Architektur Jenseits des Lampenstacks: Rolle von PHP in der modernen Enterprise -Architektur Jul 27, 2025 am 04:31 AM

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

PHP Integrierte KI -Spracherkennung und übersetzer PHP -Treffen automatische Generationsl?sung PHP Integrierte KI -Spracherkennung und übersetzer PHP -Treffen automatische Generationsl?sung Jul 25, 2025 pm 07:06 PM

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.

See all articles