English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
لماذا يتم استخدام "برنامج السارق"؟
استخراج معلومات المقالات أو المعلومات التجارية عن بُعد هو وظيفة تتطلبها العديد من الشركات من المبرمجين، وهي ما يُعرف بـ "برنامج السارق". من أكبر مزاياها: حل مشكلة العمل الشاق للناشرين في الشركة، وزيادة الكفاءة بشكل كبير. يمكن استخراج معلومات موقع آخر بسرعة عند تشغيله.
أين يتم تشغيل "برنامج السارق"؟
يفضل تشغيل "برنامج السارق" تحت DOS في Windows أو تحت Linux باستخدام أمر PHP، لأن، تشغيل الصفحة على الويب قد يتجاوز وقت الاستجابة.
مثل الشكل (مثال على DOS تحت Windows):
تحقيق "برنامج السارق"
سنشرح هذا من خلال مثال، دعونا نلتقط معلومات الأخبار لموقع "هوايوانت إلكتروني"، يرجى النظر في هذا الرابط http://www.hqew.com/info-c10.html، عندما تفتح هذه الصفحة ستجد بعض الظواهر:
1- قائمة الأخبار تحتوي على 500 صفحة (2012-01-03);
2- كل صفحة من الروابط URL لها نمط، مثل: الصفحة 1 هيhttp://www.hqew.com/info-c10-1.html; الصفحة 2 هيhttp://www.hqew.com/info-c10-2.html;…… الصفحة 500 هيhttp://www.hqew.com/info-c10-500.html;
3- يمكن معرفة من النقطة الثانية أن معلومات "موقع هوايوانت إلكتروني" هي صفحات伪静态 أو صفحات مولدة ديناميكياً
其实,基本上大部分的网站都有这样的规律,比如:中关村在线、慧聪网、新浪、淘宝……。
这样,我们可以通过这样的思路来实现页面内容的抓取:
1、先获取文章列表页内容;
2、根据文章列表页内容循环获取文章的 url 地址;
3、根据文章的 url 地址获取文章的详细内容
这里,我们主要抓取资讯页里面的:标题(title)、发布如期(date)、作者(author)、来源(source)、内容(content)
“华强电子网”资讯抓取
首先,先建数据表结构,如下所示:
CREATE TABLE `article`.`article` ( `id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `title` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `date` VARCHAR( 50 ) NOT NULL , `author` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `source` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `content` TEXT NOT NULL ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
抓取程序:
<?php /** * 抓取“华强电子网”资讯程序 * author Lee. * Last modify $Date: 2012-1-3 15:39:35 $ */ header('Content-Type:text/html;Charset=utf-8'); $mysqli = new mysqli('localhost', 'root', '1715544', 'article'); # 数据库连接,请手动修改您自己的数据库信息 $mysqli->set_charset('UTF8'); # 设置数据库编码 function data($url) {}} global $mysqli; $result = file_get_contents($url); # $result يحصل على محتوى رابط URL (تنبيه: هنا هو رابط قائمة المقالات) $pattern = '/<li><span class="box_r">.+<\/span><a href="([^"]+)" title="[#1#]" >.+<\/a><\/li>/Usi'; # للحصول على عنوان المقال preg_match_all($pattern, $result, $arr); # يوزع عنوان قائمة المقالات على نطاق البنية $arr(نطاق ثنائي) foreach ($arr[1] as $val) { $val = 'http://www.hqew.com' . $val; # عنوان المقال الحقيقي $re = file_get_contents($val); # $re هو محتوى عنوان المقال $pa = '/<div id="article">\s+<h1>(.+)<\/h1>\s+<p id="article\_extinfo">\s+发布:\s+(.+)\s+\|\s+作者:\s+(.+)\s+\|\s+来源:\s+(.*?)\s+<span style="display:none" >.+<div id="article_body">\s*(.+)\s+<\/div>\s+<\/div><!--article end-->/Usi'; # للحصول على محتوى المقال preg_match_all($pa, $re, $array); # يوزع المحتوى الذي تم الحصول عليه على نطاق البنية $array $content = trim($array[5][0]); $con = array; 'title' => mysqlString($array[1][0]), 'date' => mysqlString($array[2][0]), 'author' => mysqlString(stripAuthorTag($array[3][0])), 'source' => mysqlString($array[4][0]), 'content' => mysqlString(stripContentTag($content)) );}} $sql = "INSERT INTO article(title,date,author,source,content) VALUES ('{$con['title']}','{$con['date']}','{$con['author']}','{$con['source']}','{$con['content']}')"; $row = $mysqli->query($sql); # إضافة إلى قاعدة البيانات if ($row) { echo 'add success!'; } else { echo 'add failed!'; } } } /** * stripOfficeTag($v) فلاتر محتوى المقال، مثل: إزالة الروابط، فلاتر علامات HTML غير الضرورية...... * @param string $v * @return string */ function stripContentTag($v){ $v = str_replace('<p> </p>', '', $v); $v = str_replace('<p />', '', $v); $v = preg_replace('/<a href=".+" target="\_blank"><strong>(.+)<\/strong><\/a>/Usi', '\1', $v); $v = preg_replace('%(<span\s*[^>]*>(.*)</span>)%Usi', '\2', $v); $v = preg_replace('%(\s+class="Mso[^"]+")%si', '', $v); $v = preg_replace('%( style="[^"]*mso[^>]*)%si', '', $v); $v = preg_replace('/<b><\/b>/', '', $v); return $v; } /** * stripTitleTag($title) فلاتر عنوان المقال * @param string $v * @return string */ function stripAuthorTag($v) { $v = preg_replace('/<a href=".+" target="\_blank">(.+)<\/a>/Usi', '\1', $v); return $v; } /** * mysqlString($str) فلاتر البيانات * @param string $str * @return string */ function mysqlString($str) { return addslashes(trim($str)); } /** * @return string init($min, $max) طريقة مدخل البرنامج، تبدأ من الصفحة $min وتنتهي في الصفحة $max * @param int $min تبدأ من 1 * @param int $max * @return string عودة عنوان URL */ function init($min=1, $max) { for ($i=$min; $i<=$max; $i++) { data("http://www.hqew.com/info-c10-{$i}.html"); } } init(1, 500); // مدخل البرنامج، يبدأ من الصفحة الأولى ويتم استخراج 500 صفحة ؟?>
من خلال البرنامج المذكور أعلاه، يمكنك تنفيذ استخراج معلومات الأخبار من موقع هواي قوي.
الطريقة الدخولية init($min, $max) إذا كنت تريد استخراج محتوى صفحات 1-500، فإن init(1, 500) يمكن أن تكون كافية! بذلك، في غضون وقت قصير، سيتم استخراج جميع الأخبار من موقع هواي قوي إلى قاعدة البيانات. ^_^
واجهة التنفيذ:
قاعدة البيانات:
بيان: محتوى هذا المقال تم جمعه من الإنترنت، حقوق النشر تخص أصحابها، تم جمع المحتوى بشكل تلقائي من قبل المستخدمين على الإنترنت، ويحمل هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا رأيت محتوى يشتبه في حقوق النسخ، فمرحبًا بك في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال # بـ @ عند إرسال البريد الإلكتروني) لإبلاغنا، وقدم الدليل على ذلك، وإذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم عن حقوق النسخ على الفور.^_^