سلام :)
مطلب امروز ضمن آشنا کردن شما با Web crawler و معماری آن، سورس خزنده وب ساده ای به زبان جاوا را ارائه می دهد.
خزنده وب که بیشتر ما آن را با عنوان Web crawler می شناسیم به برنامه کامپیوتری اطلاق می شود که World Wide Web (وب جهان گستر) را به صورت مرتب و سلسله مراتبی بازدید کرده و اطلاعات آن را مورد پردازش قرار می دهد. از Web crawler ها با عناوین دیگری مانند ants, automatic indexers, bots, Web spiders و Web robots نیز یاد می شود.
۱- موتورهای جستجو
موتورهای جستجو و برخی از سایت ها دارای خزنده ها ویا روبات هایی هستند که برای گردآوری اطلاعات وب سایت ها و نیز بروز نگه داشتن اطلاعات مورد استفاده قرار می گیرند. مهم ترین کار بعد از گردآوری اطلاعات، ایندکس کردن آن ها برای پردازش سریع هنگام جستجو است. این خزنده ها معمولا در بازه های زمانی منظمی اطلاعات را بروز کرده و با نسخه های قبلی مقایسه می کنند.
۲- مدیریت فنی وب سایت
مدیریت فنی وب سایت بخشی از کار این خزنده هاست که شامل یافتن لینک های شکسته (Broken Link) ، اعتبار سنجی (Validation) کدهای HTML، فایل های CSS و ... می باشد.
۳- جمع آوری اطلاعات خاص
کاربرد دیگر خزنده های وب جمع آوری اطلاعات خاصی مانند آدرس های ایمیل است. معمولا هدف از اینکار ارسال هرزنامه (spam) می باشد. برای جلوگیری از ثبت آدرس ایمیل توسط این خزنده ها، می توانید آدرس ایمیل خود را به صورت saeidREMOVEME AT جیمیل و یا موارد مشابه دیگر بنویسید.
به صورت عمومی نحوه کار Web crawler ها به این صورت است که ابتدا لیستی از URL ها (آدرس های وب) که به عنوان seed شناخته می شوند را برای بازدید پردازش می کنند. هنگام پردازش این آدرس ها، لیست لینک ها و آدرس های موجود در صفحات آن ها را گردآوری کرده و به لیست ابتدایی اضافه می کنند. بقیه اطلاعات را نیز با توجه به نیاز و هدف خود ذخیره و پردازش می نمایند.
خزنده وب بخش اصلی و مرکزی هر موتور جستجویی را تشکیل می دهد. به همین جهت الگوریتم و معماری آن ها به شدت مخفی نگه داشته می شود. با این وجود معماری سطح بالای (High-level architecture) آن به شکل زیر می باشد:

منظور از عادی کردن آدرس، یکی کردن آدرس هایی می باشد که دارای خروجی یکسانی هستند. هدف از این کار جلوگیری از جمع آوری اطلاعات یکسان از چندین URL می باشد. URL normalization با نام URL canonicalization نیز شناخته می شود که همان فرآیند تغییر آدرس برای استاندارد شدن می باشد.
• تبدیل آدرس به حروف کوچک
• افزودن / به آدرس در صورت نیاز
• حذف آدرس ایندکس دایرکتوری
• بزرگ کردن حروف encode شده یا همان حروف بعد از علامت ٪
• حذف بخش زاید
• حذف و تبدیل آی پی به دامنه
• اعمال محدودیت بر روی پروتکل ها مانند تبدیل https به http
• حذف پورت پیش فرض (پورت ۸۰ به صورت پیش فرض برای http می باشد)
• حذف / های تکراری
• حذف . ها (dot-segments)
• حذف www از اول دامنه
• مرتب کردن متغییرهای صفحه فعال
• حذف متغییرهای اختیاری از query-string
• حذف متغییرهای پیش فرض از query-string
• حذف علامت ? هنگامی که query-string خالی باشد
• استانداردکردن encoding کاراکترها
خزنده های وب معمولا با استفاده از فیلد User-agent داده HTTP request خود را معرفی می کنند. شما با استفاده از لاگ وب سرور خود می توانید لیست این Web crawler های را مشاهده کنید. فیلد User agent ممکن است شامل URL ای باشد که به سایت سازنده خزنده اشاره می کند.
Spambot ها و سایر خزنده های مخرب معمولا فیلد User agent را به صورت غیر واقعی با اطلاعاتی مانند نام یک مرورگر پر می کنند.
این فایل برای دادن اطلاعات اولیه در زمینه وب سایت مورد پردازش به خزنده های وب استفاده می گردد. به عنوان مثال با این فایل می توانید دسترسی خزنده های وب به بعضی زیر شاخه ها محدود کنید. دستورات زیر در فایل robots.txt از دسترسی خزنده ها به دایرکتوری /tmp/ جلوگیری می کند:
* فایل robots.txt یک استاندارد می باشد. به همین جهت خزنده وب (معمولا خزنده مخرب) می تواند آن را نادیده بگیرد.
در زیر لیست معروف ترین خزنده های وب را مشاهده می کنید:
سایت sun در سال ۱۹۹۸ مقاله ای آموزشی با عنوان "Writing a Web Crawler in the Java Programming Language" را ارائه داد. در آن مقاله ضمن توضیح دادن Web crawler سورس برنامه آن نیز در اختیار عموم قرار گرفت. البته این برنامه خیلی ساده و در مرحله ابتدایی می باشد. شما باید با توجه به نیازهای خود آن را تغییر داده و مورد استفاده قرار دهید.
• دانلود سورس خزنده وب به زبان جاوا (لینک کمکی)
برای سایت هایی که از نرم افزار های آماده مثل وردپرس استفاده نشده است و نیاز به موتور جستجو احساس می شد، با استفاده از خزنده ای که نوشتم، اطلاعات کل وب سایت مورد نظر را در داخل یک جدول در پایگاه داده ذخیره کردم. سپس توابعی برای جستجو بهینه بر روی داده ها در MySQL نوشتم و با استفاده از آن ها بخش جستجوی وب سایت مورد نظر را راه اندازی کردم. نمونه این جستجو ها در سایت های زیر فعال می باشد:
• داتک تله کام
• ارتباطات فرادانش سامان
موفق باشید ;)
مطلب امروز ضمن آشنا کردن شما با Web crawler و معماری آن، سورس خزنده وب ساده ای به زبان جاوا را ارائه می دهد.
خزنده وب (Web Crawler) چیست؟
خزنده وب که بیشتر ما آن را با عنوان Web crawler می شناسیم به برنامه کامپیوتری اطلاق می شود که World Wide Web (وب جهان گستر) را به صورت مرتب و سلسله مراتبی بازدید کرده و اطلاعات آن را مورد پردازش قرار می دهد. از Web crawler ها با عناوین دیگری مانند ants, automatic indexers, bots, Web spiders و Web robots نیز یاد می شود.
کاربرد ها
۱- موتورهای جستجو
موتورهای جستجو و برخی از سایت ها دارای خزنده ها ویا روبات هایی هستند که برای گردآوری اطلاعات وب سایت ها و نیز بروز نگه داشتن اطلاعات مورد استفاده قرار می گیرند. مهم ترین کار بعد از گردآوری اطلاعات، ایندکس کردن آن ها برای پردازش سریع هنگام جستجو است. این خزنده ها معمولا در بازه های زمانی منظمی اطلاعات را بروز کرده و با نسخه های قبلی مقایسه می کنند.
۲- مدیریت فنی وب سایت
مدیریت فنی وب سایت بخشی از کار این خزنده هاست که شامل یافتن لینک های شکسته (Broken Link) ، اعتبار سنجی (Validation) کدهای HTML، فایل های CSS و ... می باشد.
۳- جمع آوری اطلاعات خاص
کاربرد دیگر خزنده های وب جمع آوری اطلاعات خاصی مانند آدرس های ایمیل است. معمولا هدف از اینکار ارسال هرزنامه (spam) می باشد. برای جلوگیری از ثبت آدرس ایمیل توسط این خزنده ها، می توانید آدرس ایمیل خود را به صورت saeidREMOVEME AT جیمیل و یا موارد مشابه دیگر بنویسید.
نحوه کار
به صورت عمومی نحوه کار Web crawler ها به این صورت است که ابتدا لیستی از URL ها (آدرس های وب) که به عنوان seed شناخته می شوند را برای بازدید پردازش می کنند. هنگام پردازش این آدرس ها، لیست لینک ها و آدرس های موجود در صفحات آن ها را گردآوری کرده و به لیست ابتدایی اضافه می کنند. بقیه اطلاعات را نیز با توجه به نیاز و هدف خود ذخیره و پردازش می نمایند.
معماری خزنده وب
خزنده وب بخش اصلی و مرکزی هر موتور جستجویی را تشکیل می دهد. به همین جهت الگوریتم و معماری آن ها به شدت مخفی نگه داشته می شود. با این وجود معماری سطح بالای (High-level architecture) آن به شکل زیر می باشد:

عادی کردن آدرس (URL normalization)
منظور از عادی کردن آدرس، یکی کردن آدرس هایی می باشد که دارای خروجی یکسانی هستند. هدف از این کار جلوگیری از جمع آوری اطلاعات یکسان از چندین URL می باشد. URL normalization با نام URL canonicalization نیز شناخته می شود که همان فرآیند تغییر آدرس برای استاندارد شدن می باشد.
مراحل فرایند عادی کردن آدرس
• تبدیل آدرس به حروف کوچک
HTTP://www.Example.com/ → http://www.example.com/
• افزودن / به آدرس در صورت نیاز
http://www.example.com → http://www.example.com/
• حذف آدرس ایندکس دایرکتوری
http://www.example.com/default.asp → http://www.example.com/ http://www.example.com/a/index.html → http://www.example.com/a/
• بزرگ کردن حروف encode شده یا همان حروف بعد از علامت ٪
http://www.example.com/a%c2%b1b → http://www.example.com/a%C2%B1b
• حذف بخش زاید
http://www.example.com/bar.html#section1 → http://www.example.com/bar.html
• حذف و تبدیل آی پی به دامنه
http://208.77.188.166/ → http://www.example.com/
• اعمال محدودیت بر روی پروتکل ها مانند تبدیل https به http
https://www.example.com/ → http://www.example.com/
• حذف پورت پیش فرض (پورت ۸۰ به صورت پیش فرض برای http می باشد)
http://www.example.com:80/bar.html → http://www.example.com/bar.html
• حذف / های تکراری
http://www.example.com:80/bar.html → http://www.example.com/bar.html
• حذف . ها (dot-segments)
http://www.example.com/../a/b/../c/./d.html → http://www.example.com/a/c/d.html
• حذف www از اول دامنه
http://www.example.com/ → http://example.com/
• مرتب کردن متغییرهای صفحه فعال
http://www.example.com/display?lang=en&article=fred → http://www.example.com/display?article=fred〈=en
• حذف متغییرهای اختیاری از query-string
http://www.example.com/display?id=123&fakefoo=fakebar → http://www.example.com/display?id=123
• حذف متغییرهای پیش فرض از query-string
http://www.example.com/display?id=&sort=ascending → http://www.example.com/display
• حذف علامت ? هنگامی که query-string خالی باشد
http://www.example.com/display? → http://www.example.com/display
• استانداردکردن encoding کاراکترها
http://www.example.com/display?category=foo/bar+baz → http://www.example.com/display?category=foo%2Fbar%20baz
شناسایی خزنده وب
خزنده های وب معمولا با استفاده از فیلد User-agent داده HTTP request خود را معرفی می کنند. شما با استفاده از لاگ وب سرور خود می توانید لیست این Web crawler های را مشاهده کنید. فیلد User agent ممکن است شامل URL ای باشد که به سایت سازنده خزنده اشاره می کند.
Spambot ها و سایر خزنده های مخرب معمولا فیلد User agent را به صورت غیر واقعی با اطلاعاتی مانند نام یک مرورگر پر می کنند.
فایل robots.txt
این فایل برای دادن اطلاعات اولیه در زمینه وب سایت مورد پردازش به خزنده های وب استفاده می گردد. به عنوان مثال با این فایل می توانید دسترسی خزنده های وب به بعضی زیر شاخه ها محدود کنید. دستورات زیر در فایل robots.txt از دسترسی خزنده ها به دایرکتوری /tmp/ جلوگیری می کند:
User-agent: * Disallow: /tmp/
* فایل robots.txt یک استاندارد می باشد. به همین جهت خزنده وب (معمولا خزنده مخرب) می تواند آن را نادیده بگیرد.
معروف ترین خزنده های وب غیر آزاد
در زیر لیست معروف ترین خزنده های وب را مشاهده می کنید:
- Yahoo! Slurp
- Msnbot
- FAST Crawler
- Googlebot
- Methabot
- arachnode.net
- PolyBot
- RBSE
- WebCrawler
- World Wide Web Worm
- WebFountain
- WebRACE
معروف ترین خزنده های متن باز
- Aspseek
- crawler4j
- DataparkSearch
- Ebot
- GNU Wget
- GRUB
- Heritrix
- ht://Dig
- HTTrack
- ICDL Crawler
- mnoGoSearch
- Nutch
- Open Search Server
- Pavuk
- YaCy
سورس خزنده وب به زبان جاوا
سایت sun در سال ۱۹۹۸ مقاله ای آموزشی با عنوان "Writing a Web Crawler in the Java Programming Language" را ارائه داد. در آن مقاله ضمن توضیح دادن Web crawler سورس برنامه آن نیز در اختیار عموم قرار گرفت. البته این برنامه خیلی ساده و در مرحله ابتدایی می باشد. شما باید با توجه به نیازهای خود آن را تغییر داده و مورد استفاده قرار دهید.
• دانلود سورس خزنده وب به زبان جاوا (لینک کمکی)
کاربرد خزنده وب برای من
برای سایت هایی که از نرم افزار های آماده مثل وردپرس استفاده نشده است و نیاز به موتور جستجو احساس می شد، با استفاده از خزنده ای که نوشتم، اطلاعات کل وب سایت مورد نظر را در داخل یک جدول در پایگاه داده ذخیره کردم. سپس توابعی برای جستجو بهینه بر روی داده ها در MySQL نوشتم و با استفاده از آن ها بخش جستجوی وب سایت مورد نظر را راه اندازی کردم. نمونه این جستجو ها در سایت های زیر فعال می باشد:
• داتک تله کام
• ارتباطات فرادانش سامان
منابع
موفق باشید ;)
بابت مقاله مفیدتون تشکر می کنم اما چند جایش برای من سوال پیش آمد و همینطور یک بخشیش برایم گنگ است خواهش می کنم اگر سیستم شما توانایی باخبر سازی نویسنده نظر را دارد پاسخ را در قالب یک مطلب منتشر سازید.
پاسخحذفلطفا بیشتر در باره این بخش "برای جلوگیری از ثبت آدرس ایمیل توسط این خزنده ها، می توانید آدرس ایمیل خود را به صورت saeidREMOVEME AT جیمیل و یا موارد مشابه دیگر بنویسید." توضیح دهید
--
در کدام وبسایت معتبر از "بزرگ کردن حروف encode شده یا همان حروف بعد از علامت ٪" صحبت شده است؟ و اگر خودتان پاسخی در این باره می دهید لطفا چرایش را نیز ذکر کنید
--
از نظر بهینه سازی همانطور که گوگل در بخش ابزار وبمستر خودش توضیح داده، آدرس وبسایت به چند نوع مختلف نوشته می شود که بهینه ترین آن با www در اول آدرس می باشد. پس چرا شما می گویید "حذف www از اول دامنه" ؟
سپاس گذارم،
ع. اسکندرپور
دم شما گرم. استفاده کردم. اما کاش اسکریپت php (یا زبانی دیگر) که بروز باشه هم برای این کار میگذاشتید :)
پاسخحذفاسکریپتی که گذاشتم با اینکه قدیمیه ولی برای شروع خیلی خوبه. استاندارد هایی رو که یک خزنده باید داشته باشه، داره.
پاسخحذفبسیار استفاده
پاسخحذفخیلی ممنونم
موفق باشین
مطلب موق عالی بود .
پاسخحذفسلام
پاسخحذفدر مورد نحو نوشتن آدرس ایمیل ها باید بگم که وقتی شما اون رو خیلی ساده به صورت mail@example.com می نویسید، خوانایی اون برای روبات ها و خزنده هایی که آدرس های ایمیل رو برای ارسال اسپم جمع آوری می کنند خیلی راحته.
برای جلوگیری از ثبت آدرس ایمیلتون باید اون رو طوری بنویسید که برای انسان ها که هوشمند هستند خوانایی داشته باشه ولی برای خزنده نه. مثلا اون رو به صورت عکس در بیارید (البته خزنده هایی هستند که از عکس ها هم آدرس های ایمیل رو حمع آوری می کنند) و یا همونطور که بالا گفتم به صورت saeidREMOVEME AT جیمیل بنویسید. وقتی کسی بخواد به این آدرس ایمیل ارسال کنه بخش REMOVEME رو از آدرس حذف می کنه، AT رو به صورت @ می نویسه و جیمیل رو به صورت gmail.com می نویسه. در نهایت آدرس به صورت saeid@gmail.com در میاد.
به آدرس http://en.wikipedia.org/wiki/URL_normalization مراجعه کنید. در بخش References منابع و استانداردهای مربوط به normalization رو نوشته. مهمترین استاندارد هم RFC شماره ۳۹۸۶ به آدرس http://tools.ietf.org/html/rfc3986 هست. در این RFC تمامی موارد normalization و دلایل اون ها بیان شدن.
من با ابزار webmaster گوگل آشنایی دارم. اونجا حرفی در مورد اینکه اگه www در اول آدرس باشه بهتره. فقط گفته که یا همه لینک هاتون به آدرس بدون www باشه و یا همه لینک هاتون رو به آدرس با www بدید.
اطلاعات بیشتر -> http://www.google.com/support/webmasters/bin/answer.py?answer=44231
با احترام
سلام
پاسخحذفببخشید میدونم که این سوالم اصلا ربطی به این مطلب نداره.من تو وردپرس تازه کارم.
چطور میتونم مثل شما این rss رو تو یک فولدر به اسم feed بذارم...؟
من از وردپرس ۲.۹.۲ استفاده میکنم.
ممنونم
سلام
پاسخحذفبابت وردپرسی شدن بهتون خوش آمد می گم.
من rss رو داخل فولدر ننداختم بلکه فقط permalink رو عوض کردم. لینک های زیر می تونن راهنماییتون بکنن:
http://weblog.corelist.net/archives/1383/10/03/permalink-structure
http://codex.wordpress.org/Using_Permalinks
امیدوارم مشکلتون حل بشه.
موفق باشید
واقعا ممنونم
پاسخحذفسلام آقای زبر دست، مطلب بسیار پر باری بود دست شما درد نکنه ولی من یک سوای برام پیش اومده جرا اکثر این وب بوت ها به زبان جاوا نوشته می شه؟ با سپاس
پاسخحذفبا سلام
پاسخحذفمن دلیلش رو نمیدونم ولی شاید به خاطر قدرت جاوا پر پروسس های خیلی زیاد باشه.
درود سعید جان به بخش لینکه اضافه شدی ا شما هم در صورت تمایل میتونی منو با نام Freenet اضافه کنی !
پاسخحذفاینترنت ازاد یه پروژه شخصی برای کمک به ایجاد جریان ازاد اطلاعات تو همه سیستم عاملهاست هدف ازادیه مثل فلسفه گنو
سلام
پاسخحذفلینک شما اضافه شد :)
[...] http://zebardast.ir/%D8%AE%D8%B2%D9%86%D8%AF%D9%87-%D9%88%D8%A8-web-crawler/ [...]
پاسخحذفبا سلام .اولا خیلی بابت مقاله تشکر می کنم.من یه پروژه در مورد web crawler دارم اگه ممکنه یه کتاب یا یه مقاله ای کامل در این مورد به من معرفی کنید .خیلی ممنون میشم.
پاسخحذفمطلب خیلی عالی بود. ممنون و موفق باشید
پاسخحذفسلام
پاسخحذفیک سایت هست که اطلاعات رو از دیتابیس میخونه به زبان ASP میخونه و نشون میده. من الان دارم صفحه به صفحه اطلاعات رو کپی پیست میکنم.
اگر بخوام به روشی اتوماتیک این کار رو بکنم چیکار باید انجام بدم.
ممنون
سلام،
پاسخحذفاین مطلب رو ببینید:
http://zebardast.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%AA%D9%85%D8%A7%D9%85-%D9%88-%DA%A9%D9%85%D8%A7%D9%84-%DB%8C%DA%A9-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%A7-%DB%8C%DA%A9-%D8%AE%D8%B7-%D8%AF%D8%B3%D8%AA%D9%88/
[...] http://zebardast.ir/%D8%AE%D8%B2%D9%86%D8%AF%D9%87-%D9%88%D8%A8-web-crawler/ [...]
پاسخحذف[...] ۶:۵۵ ب.ظسلام،— Apache Luceneحدود یک سال و نیم قبل در مطلبی به معرفی خزندههای وب (Web crawlers) و آموزش راه اندازی یک خزنده وب ساده به زبان جاوا [...]
پاسخحذفسلام
پاسخحذفمیشه یه الگوریتمی از طراحی خزنده به من بدین؟ می خوام با سی شارپ بنویسم میشه کمکم کنید؟
ممنون
سلام،
پاسخحذفمن الگوریتم آمادهای برای این کار ندارم. پیشنهاد میکنم توو گوگل جستجو کنید. من جستجو کردم، تعداد زیادی الگوریتم برای وب کراولر وجود داشت:
http://www.google.com/search?q=web+crawler+algorithm
شما در مورد رتبه بندی آنلاین اطلاعاتی دارد ؟ ممنون می شم بفرستید
پاسخحذفسلام
پاسخحذفخیلی ممنون از مطلب مفیدتون. بسیار استفاده کردم.
ممنـــــــون :)
سلام من می خواستم نرم افزارهای کامل موتورجستجو رو پیدا کنم کسی هست که بتونه کمکم کنه این نرم افزار crawler که توسایتتون گذاشتید همون نرام افزار اصلی که تو موتورهای جستجو استفاده می شه؟ با تشکر
پاسخحذفسلام،
پاسخحذفاین مطلب فقط برای شروع در زمینه خزنده ها وب هست. نرم افزاری که در این مطلب معرفی شده، فقط برای شروع بوده و برای انجام پروژه های تجاری توصیه نمیشود.
[...] http://zebardast.ir/%D8%AE%D8%B2%D9%86%D8%AF%D9%87-%D9%88%D8%A8-web-crawler/ [...]
پاسخحذفسلام خیلی ممنون از مطالب مفیدتون واقعا استفاده شد.منبعی که الگوریتم های کراول رو معرفی کنه نمی شناسید؟؟ممنون میشم راهنمایی کنید.
پاسخحذفسلام،
پاسخحذفمتاسفانه من فهرستی از الگوریتمهای Crawling رو پیدا نکردم. البته به صورت متفرقه مواردی بود ولی نیاز به دستهبندی شده و مرتبسازی دارن.
با سلام
پاسخحذفمطلب بسیار خوبی رو منتشر کردید یک سئوال ا ز خدمتتون داشتم ممنون میشم راهنماییم کنید
سئوال من اینه با استفاده از خزنده ها میشه مطالب یک سایتی مثل یک نشریه رو ایندکس روی سرور خودمون کرد ؟ کاری که گوگل میکنه.
اگر امکانش هست باید از ابتدا این خزنده نوشته بشه یا با خزندهای متن باز این کار شدنیه ؟
البته من برنامه نویسی بلد نیستم و دلیل سئوالم اینکه اگر شدنی بود و قصد داشتم کار را به کسی محول کنم اطلاعاتی راجع بهش داشته باشم
با تشکر
سلام،
پاسخحذفبله، امکانش وجود داره. به عنوان نمونه میتونین از Apache Lucene استفاده کنید:
http://zebardast.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87%E2%80%8C%D8%B3%D8%A7%D8%B2%DB%8C-apache-lucene/