خزنده وب (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

انتقال اطلاعات در MySQL

سلام :)

یکی از مراحل انتقال اطلاعات یک پروژه مربوط به انتقال پایگاه های داده می باشد. برای اینکار روش های مختلفی وجود دارد ولی همه آنها ۲ مرحله مشابه دارند، Import و Export کردن. مرحله export کردن را می توان به عنوان درست کردن نسخه پشتیبان نیز در نظر گرفت.
با فرض اینکه پایگاه داده مورد استفاده MySQL می باشد، می توانید از دستورات زیر استفاده کنید:

Export

دستور mysqldump برای گرفتن خروجی از پایگاه داده استفاده می شود. به عنوان مثال:

$ mysqldump -umy_user -p -R my_database > export.sql

دستور بالا محتویات پایگاه داده my_database به همراه روتین های آن (پارامتر R) را در فایل export.sql ذخیره می کند.
در صورتی که پایگاه داده شما بر روی سرور قرار دارد می توانید با استفاده از پارامتر h و کاربر خودتان بر روی سرور مستقیم و بدون نیاز به ftp و ssh نسخه پشتیبان تهیه کنید:

$ mysqldump -umy_server_user -p -hserver_host -R my_database > export.sql

Import

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

$ mysql -umy_user -p my_database < export.sql

* به جهت علامت > توجه کنید.

ترکیب کردن Export و Import

برای ترکیب کردن این دو دستور از | استفاده می کنیم:

$ mysqldump -umy_user_1 -pmy_pass_1 -R my_database \
 | mysql -umy_user_2 -pmy_pass_2 my_database

*حداقل یکی از رمز عبورهای بالا (my_pass_1 یا my_pass_2) را باید وارد کنید.
البته Import کردن مستقیم از دستور Export خیلی جالب نیست. این دستور بیشتر زمانی کاربرد دارد که بخواهید یکی از جدول های پایگاه داده خود را بروز رسانی کنید:

$ mysqldump -umy_user -pmy_pass_1 -R my_database my_table \
 | mysql -umy_user -pmy_pass_2  my_database

دستور بالا ساختار و محتویات جدول my_table را بروزرسانی می کنید.

کاربرد دیگر ترکیب کردن Export و Import تهیه نسخه کاملا مشابه از پایگاه داده می باشد. دستورات زیر یک نسخه کاملا مشابه از پایگاه داده my_database با نام my_database_2 بر روی پایگاه داده ایجاد می کنید:

$ mysqladmin -umy_user -p create my_database_2
$ mysqldump -umy_user_1 -pmy_pass_1 -R my_database \
 | mysql -umy_user_2 -pmy_pass_2  my_database_2

برای اطلاعات بیشتر به لینک های زیر مراجعه کنید:

موفق باشید

  • 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

راهنمای وارد کردن(import) و صادر کردن(export) در MySQL

سلام mysql

دیروز داشتم سایتی رو منتقل می کردم. برای انتقال اطلاعات هم مثل همیشه از ترمینال(کنسول؟) استفاده کردم. گفتم اینجا روش کار رو بنویسم تا اگر شما هم روزی نیاز به انتقال دیتابیس mysql (مای اس کیو ال؟) داشتید براتون مفید باشه.
توجه داشته باشید که برای اینکه از این روش استفاده کنید، سرور شما باید لینک باشه و بتونید پورت ssh اون باز باشه. یا اینکه روی لوکال در لینوکس باشید. خلاصه اینکه بدونید یه جوری دستور رو اجرا کنید.

صادر کردن (export)

mysqldump -u username -p password database_name > FILE.sql

برای export شما باید به عنوان کاربر ریشه (root ؟) اقدام کنید.
username: نام کاربری. معمولا root
password: رمز عبور. معمولا خالی است و نیاز به نوشتن ندارد.
database_name: نام دیتابیس (پایگاه داده)
FILE.sql: نام فایلی که اطلاعات صادر شده در آن باید ذخیره شوند. در صورتی که فایل وجود نداشته باشد، این فایل ایجاد می شود.

وارد کردن (import)
با دستور زیر اطلاعات خود را وارد می کنید:

mysql -u username -p password database_name < FILE.sql

توضیحات این قسمت نیز مانند بخش صادر کردن(export) است.

موفق باشید

  • Share/Bookmark