خزنده وب (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 یک استاندارد می باشد. به همین جهت خزنده وب (معمولا خزنده مخرب) می تواند آن را نادیده بگیرد.

معروف ترین خزنده های وب

در زیر لیست معروف ترین خزنده های وب را مشاهده می کنید:

معروف ترین خزنده های متن باز

سورس خزنده وب به زبان جاوا

سایت sun در سال ۱۹۹۸ مقاله ای آموزشی با عنوان “Writing a Web Crawler in the Java Programming Language” را ارائه داد. در آن مقاله ضمن توضیح دادن Web crawler سورس برنامه آن نیز در اختیار عموم قرار گرفت. البته این برنامه خیلی ساده و در مرحله ابتدایی می باشد. شما باید با توجه به نیازهای خود آن را تغییر داده و مورد استفاده قرار دهید.

• دانلود سورس خزنده وب به زبان جاوا (لینک کمکی)

کاربرد خزنده وب برای من

برای سایت هایی که از نرم افزار های آماده مثل وردپرس استفاده نشده است و نیاز به موتور جستجو احساس می شد، با استفاده از خزنده ای که نوشتم، اطلاعات کل وب سایت مورد نظر را در داخل یک جدول در پایگاه داده ذخیره کردم. سپس توابعی برای جستجو بهینه بر روی داده ها در MySQL نوشتم و با استفاده از آن ها بخش جستجوی وب سایت مورد نظر را راه اندازی کردم. نمونه این جستجو ها در سایت های زیر فعال می باشد:

• داتک تله کام

• ارتباطات فرادانش سامان

منابع

موفق باشید ;)

  • Share/Bookmark

درباره HTML 5

html
سلام :)

HTML5 نسخه شماره ۵ زبان اصلی World Wide Web یعنی HTML است. این نسخه در تاریخ ۲۲ ژانویه ۲۰۰۸ بوسیله کنسرسیوم وب جهانی (w3c) منتشر شد.
ایده ابتدایی این نسخه از HTML در سال ۲۰۰۴ در Web Hypertext Application Technology Working Group یا همان WHATWG کلید خورد. این گروه کاری شامل شرکت های بزرگی مانند AOL، Apple، Google، IBM، Microsoft، Mozilla، Nokia، Opera و … می باشد.

نشانه های جدید
HTML 5 عناصر و ویژگی های جدیدی به تگ ها (tag) ها اضافه کرده است. از لحاظ تکنیکی بعضی از این تگ ها به div و span شبیه هستند. به عنوان مثال تگ جدید nav و تگ جدید footer از این دسته هستند.
بعضی دیگر از تگ های جدید مخصوص موتور های جستجو (برای ایندکس کردن اطلاعات) ، دستگاه های دارای صفحه کوچک (مانند موبایل) و یا خواننده های صوتی می باشند مانند تگ های جدید audio و video.
همچنین بعضی از عناصر حذف شده اند. مانند تگ center.

تفاوت ها با HTML 4
لیست تعدادی از تفاوت های HTML 5 با HTML 4 به طور خلاصه (تعداد کمی از نمونه ها نمایش داده شده است) عبارتند از:
• عناصر جدید – section, video, progress, nav, meter, time, aside, canvas
• عناصر صفحه – header, section, footer, figure
• ویژگی های جدید برای تگ Input – date/time, email, url
• ویژگی های جدید – ping, charset, async
• ویژگی های عمومی (به تمامی عناصر قابل اعمال هستند) – id, tabindex,repeat
• عناصر حذف شده – center, font, strike
برای مشاهده تمامی تفاوت های HTML 5 با ۴ کافیست به صفحه HTML 5 Reference مراجعه کنید.

میزان پشتیبانی مرورگر ها از استاندارد های HTML 5
برای مشاهده آخرین بررسی ها در رابطه با پشتیبانی مرورگر ها از استاندارد های HTML 5 می توانید به لینک های زیر مراجعه نمایید:

Implementations in Web browsers
Comparison_of_layout_engines

موفق باشید

  • Share/Bookmark

راهنمای سریع Apache Virtual Host

Apache HTTP Server
سلام

* این راهنما به طور خلاصه Virtual Host (هاست مجازی؟) را معرفی و کمی از تنظیمات آن را برای شما ارائه می دهد.
* این راهنمای برای کابران لینوکس (به ویژه اوبونتو) ایجاد گردیده است ولی می توان با تفییراتی در ویندوز نیز از آن استفاده کرد.
* این راهنما برای وب سایت های به اصطلاح name-based آماده شده است.

از Virtual Host برای راه اندازی بیش از یک وب سایت (مانند: www.company1.com و www.company2.com) بر روی یک سرور استفاده می شود. کاربرد دیگر Virtual Host در سیستم عامل لینوکس که بسیار مورد استفاده قرار می گیرد، ایجاد یک دایرکتوری در پوشه خانگی کاربر است. این پوشه به جای /var/www مورد استفاده قرار می گیرد.
فرض می کنید که شما قصد ایجاد یکی دایرکتوری برای سایتی مانند example.com در پوشه خانگی خود را دارید.

برای ساخت یک Virtual Host ابتدا دستور زیر را وارد کنید:

sudo nano /etc/apache2/sites-available/local.example.com

سپس عبارت های زیر را در آن بنویسید:

NameVirtualHost 127.0.15.1:80
<VirtualHost 127.0.15.1:80>
        ServerAdmin webmaster@example.com
        DocumentRoot /home/USER/www/example.com
        ServerName local.example.com
        <Directory /home/saeitt/www/example.com/>
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        ErrorLog /home/USER/www/example.com/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog /home/USER/www/example.com/access.log combined
        ServerSignature On
</VirtualHost>

* به جای ۱۲۷٫۰٫۱۵٫۱ یک آی پی دلخواه بنویسید.
* به جای USER نام دایرکتوری یوزر خود در پوشه home را بنویسید. این نام به صورت پیش فرض همان نام کاربری شما است.

سپس با زدن دکمه Ctrl+x و وارد کردن y فایل ذخیره کنید.
تا این مرحله شما یک Virtual Host نسبتا ساده را ایجاد کرده اید. برای فعال کردن این Virtual Host مراحل زیر را انجام دهید.

دستورات زیر را وارد کنید:

cd ../sites-enabled/
sudo ln -s ../sites-available/local.example.com

فایل تنطیمات مربوط به هاست ها را برای تنظیم آی پی ۱۲۷.۰.۱۵.۱ به دامنه local.example.com ویرایش می کنید:

sudo nano /etc/hosts

خط زیر را به آخر این فایل اضافه کنید:

۱۲۷٫۰٫۱۵٫۱ local.example.com

سپس با زدن دکمه Ctrl+x و وارد کردن y فایل ذخیره کنید.

در آخر دستور زیر را برای رستارت کردن وب سرور آپاچی به کار برید:

sudo /etc/init.d/apache2 restart

در صورتی که دایرکتوری example.com را نداشته باشید، با خطای زیر مواجه می شوید:

Warning: DocumentRoot [/home/USER/www/example.com] does not exist

* لطفا دایرکتوری را بسازید و دوباره آپاچی را رستارت کنید:

mkdir /home/USER/www
mkdir /home/USER/www/example.com
sudo /etc/init.d/apache2 restart

ساخت Virtual Host به اتمام رسید. برای تست کردن آدرس http://local.example.com/ را در مرورگر خود وارد کنید.

لینک ها:
راهنمای Virtual Host (ویکی کاربران اوبونتو)
Apache Virtual Host documentation

پی نوشت:
* این راهنما به درخواست علی عزیز ایجاد شده است. بزودی راهنمای کامل تر و جامع تری را می نویسم.
* به لطف بعضی مسئولان، اوبونتو امسال عرفه ای در الکامپ ندارد.
* پیج رنک مداد آی تی ۴ شد.

موفق باشید

  • Share/Bookmark

اعمال چندین کلاس به یک عنصر (تگ) HTML

سلام

گاهی اوقات نیاز به اعمال چندین کلاس به یک عنصر دارید. مثلا فرض کنید که یک کلاس برای بردر (قاب؟) های کم رنگ، یک کلاس دیگر برای بک گراند (پس زمینه؟) های پر رنگ و یک کلاس دیگر برای فونت ها ایجاد کرده باشید.
برای ترکیب این کلاس ها و استفاده آنها کافیست نام آنها را در ویژگی class یک عنصر با فاصله از هم جدا کرده و بنویسید. مانند:

<p class=”cl1 cl2 cl3″>

موفق باشید

  • Share/Bookmark

حل مشکل سایز فیلد password در IE

سلام

یکی از اشکلات IE در نمایش فیلد های password فرم ها می باشد. به تصویر زیر توجه کنید:

password field solution in IE

برای حل این مشکل کافیست تا به همه فیلد های خود (برای داشتن اندازه ی برابر) کد استایل زیر را اضافه نمائید:

style=”font-family:’arial’;”

البته arial هر مقداری می تواند باشد. مهم اعمال خصیصه font-family می باشد.(این اعمال می تواند توسط کلاس ها، تگ ها و … صورت گیرد.)

به عکس زیر توجه کنید:

password field fixed in IE

موفق باشید

  • Share/Bookmark