۱۳۸۹/۰۴/۰۶

خزنده وب (Web Crawler)

سلام :)

مطلب امروز ضمن آشنا کردن شما با 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 نوشتم و با استفاده از آن ها بخش جستجوی وب سایت مورد نظر را راه اندازی کردم. نمونه این جستجو ها در سایت های زیر فعال می باشد:

• داتک تله کام

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

منابع



موفق باشید ;)

۱۳۸۹/۰۴/۰۲

تجربه سفر به استانبول

سلام :)

هفته قبل چند روزی همراه با خانواده و دوستان به استانبول، شهر فرهنگی اروپا مسافرت کردیم. سفر خیلی خوبی بود. با اینکه فرصت خیلی کمی برای گشت گذار داشتیم، با این حال سعی کردیم بیشتر جاهای زیبا و شناخته شده آن را ببینیم. در این مطلب خاطرات و تجربه سفرم را برای شما می نویسم.

معرفی استانبول




به نقل از ویکی پدیا:
استانبول بزرگ‌ترین شهر کشور ترکیه و مرکز فرهنگی و اقتصادی آن است. این شهر در کنار تنگه بسفر و دریای مرمره قرار دارد. تنگه بسفر دو قاره آسیا و اروپا را جدا می‌کند و استانبول تنها شهر بزرگ جهان است که در دو قاره قرار دارد. بندر طبیعی شاخ طلایی یا خلیج در این شهر واقع است.
این کلان شهر به عنوان شهر فرهنگی اروپا برای سال ۲۰۱۰ انتخاب شده‌است.

شروع مسافرت

برای سفر پیشنهاد می کنم که از تورهای مسافرتی استفاده کنید. اینکار باعث کاهش چشمگیر هزینه هتل و بلیط هواپیما می شود. در صورت تهیه بلیط از قبل اطمینان پیدا کنید که فرودگاه مقصد در ترکیه آتاتورک باشد. فرودگاه سابیحا تا بخش اروپایی حدود ۱ ساعت فاصله دارد. در صورت امکان بلیط هواپیما را از شرکت های غیر ایرانی تهیه کنید.

بیشتر مراکز تاریخی و دیدنی استانبول در بخش اروپایی آن قرار دارند.

هنگام رزرو هتل دقت کنید که هتل در یکی از دو منطقه آکسارای یا تکسیم باشد. منطقه آکسارای به مراکز تاریخی و منطقه تکسیم به مراکز خرید نزدیک هستند. البته رفت و آمد در شهر خیلی ساده تر از این حرف هاست. در ادامه در مورد آن توضیح می دهم.

پیدا کردن یک آشنا یا دوست در استانبول


سایت couchsurfing.com را می شناسید؟ مطمئنا بیشتر اهالی سفر با این سایت آشنا هستند. به طور خلاصه couchsurfing یک جامعه مجازی برای اهالی سفر است. اگر قصد سفر به شهر یا کشوری را دارید، می توانید قبل از سفر دوست یا دوستانی را از طریق این سایت بیابید. برای اطلاعات بیشتر به لینک های زیر مراجعه کنید:
بیائید تا به کمک هم جهانی بهتر بسازیم!
پروژه کُوچ سِرفینگ

من از طریق این سایت با ceyda و دوستانش در استانبول آشنا شدم. آنها در روز اول ما را به شما مهمان کردند و بعد برای ۲ روز بعدی با هم برنامه ریزی کردیم. در طول مدتی که با ceyda و دوستانش بودیم  در مورد ایران، ترکیه، فوتبال، موسیقی، فیلم و حتی کشتی های ارسالی ایران به غزه صبحت کردیم. آنها به خوبی احمدی نژاد و موسوی را می شناختند. یکی از دوستان ceyda فیلم "کسی از گربه های ایرانی خبر نداره" را دیده بود و در مورد موسیقی فیلم صبحت می کرد. دوست دیگر ceyda که فرانسوی بود در مورد کلوتیلد ریس (Clotilde Reiss) صبحت می کرد.

پیشنهاد می کنم قبل از سفر به هرجایی یک آشنا از طریق couchsurfing در آنجا پیدا کنید. داشتن یک آشنا در آنجا خیلی به شما کمک می کند.

شهر


استانبول بدلیل اینکه گردشگران بسیاری به آن سفر می کنند به سرعت در حال پیشرفت می باشد.



این شهر مانند بسیاری از شهرهای موفق توریستی دارای آرامش خاصی بود. تعداد زیادی پرچم ترکیه در سراسر استانبول وجود داشت. تقریبا تمامی میدان ها و ساختمان های دولتی و خیابان ها پرچم ترکیه را بر افراشته اند.

نقطه دیگری که به چشم می خورد مساجد آن بودند. همه مساجد بزرگ دارای مناره ها زیبا و معماری یکسانی بودند. اذان هر روز نیز به صورت دیجیتال بر دیوار اصلی مساجد نمایش داده می شد. در استانبول به هر طرف که نگاه کنید مناره های مساجد را مشاهده می کنید.

محیط استانبول. مراکز خرید و مردم آن خیلی شبیه به تهران خودمان است. فقط دو فرق اساسی دارد:

۱- ترافیک

در طول مدتی که در استانبول بودیم خبری از ترافیک نبود. وجود حمل و نقل خیلی خوب شهری، هزینه زیاد بنزین و زیرساخت های اداری و اجرایی آن مهم ترین دلیل برای نبود ترافیک در آن بود.

۲- وضعیت فرهنگی

در استانبول کسی با کسی کاری نداشت. کسی در مورد نحوه پوشش مردم صبحت نمی کرد و بیشتر مردم به خود مشغول بودند. شما می توانید وارد فروشگاه، رستوران، کافی شاپ و... شده، عکس بگیرید و خارج شوید.

حیوانات در کنار انسان ها در شهر قدم هستند. سگ ها در سایه استراحت می کنند و کسی به آنها شلیک نمی کند.

شهروندان

پوشش مردان ترک خیلی شبیه مردان ایرانی هست. در مورد زن ها این قضیه فرق می کند. ظاهر زنان مسلمان آنجا با اینجا کاملا متفاوت است. در مورد زنان غیر مسلمان هم که نمی توان مقایسه ای انجام داد. تنوع رنگ، لباس و نحوه پوشش مردم به خیابان ها جان داده بود و از یکنواختی خیابان های ما در آنجا خبری نبود.

بیشتر شهروندان جوان و فروشندان می توانند به انگلیسی صبحت کنند. البته اگر ترک آذری باشید ارتباط برقرار کردن با آنها خیلی ساده تر می شود. بیشتر واژه های آن ها با ترکی خودمان یکی است فقط نحوه تلفظ آن ها متفاوت است.

برخورد آن ها با ایرانیان و در حالت کلی با گردشگران بسیار خوب است. برای آنها فرقی نمی کرد که شما از ایران باشید یا اروپا. در هر صورت آن ها به شما خوش آمد می گویند.

پلیس های سطح شهر که با موتور در حال گشت هستند بیشتر شبیه به بازیگران در حال ضبط فیلم می باشند تا پلیس. مردان و زنان پلیس با لباس های اوتو کرده و تمیز در حال گشت زنی هستند. مردان پلیس با صورت های اصلاح کرده و زنان پلیس با موهای شانه شده با پلیس ها و سربازهای خیابان های ما خیلی فرق می کنند.

کسانی که اهل سیاست هستند در اولین برخورد با شما اولین کلمه بعد از اینکه می فهمند از ایران هستید کلمه احمدی نژاد یا موسوی است. این کلمات نشاندهنده جبهه سیاسی آنان در قبال سیاست خارجی ایران است.



توریست ها

در استانبول واقعا توریست زیاد بود. آن قدر زیاد که هرگز فکر نمی کردم این قدر انسان خارجی از کشورهای مختلف را بتوان در یک شهر جمع کرد. واقعا زیاد بودند. از آسیا تا اروپا و آفریقا و آمریکا مردم در استانبول بودند.

خوراکی ها




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

در خیابان های استانبول بیشتر از فروشگاه های لباس و صنایع دستی، رستوران و کافی شاپ وجود دارد. غذا های مشترکی با ایرانیان دارند. اکثر رستوران ها میز های غذای خود را در خیابان قرار داده اند. بیشتر رستوران ها هنگام پخش فوتبال های جام جهانی تلویزیون های LCD خود را برای مشتریان روشن می کنند.

بیشتر غذاهای آن ها با گوشت است. آخرین شام "İskender kebap" خوردیم که واقعا خوشمزه و معرکه بود.



میوه در ترکیه ارزان تر از تهران بود. عرضه میوه نیز تفاوت های چشمگیری با تهران خودمان داشت. میوه فروش های اول میوه های می شستند و بعد در سبد فروش قرار می دادند و در طول روز چندین بار بر روی آن ها آب می ریختند تا طراوت خود را در گرما از دست ندهند. نحوه دیگر فروش میوه به این صورت بود که خیار و سیب را شسته و در چرخ دستی قرار می دادند و هنگام فروش آن ها با دستگاه ساده ای بدون تماس دست پوست می گرفتند و به مشتری می دادند.

ذرت (بلال) را مستقیم با حرارت نمی پختند بلکه آن را آب پز می کردند. به جای آب نمک هم از نمک خالی استفاده می کردند. ذرت های خودمان خیلی خوشمزه تر آن ها بود.

بازارها

استانبول بازارها و مراکز خرید بسیاری داشت. معروف ترین این بازارها Grand Bazaar و Spice Bazaar است. البته به توصیه ceyda و دوستانش ما از Grand Bazaar خرید نکردیم و خرید خود را از فروشگاه های موجود در اطراف و در طول مسیر تا Grand Bazaar انجام دادیم. بعد از رسیدن به گرند بازار و مشاهده قیمت های چند برابر آن متوجه توصیه ceyda و دوستانش شدیم.

دو نکته در مورد بازاری که رفتیم وجود دارد که واقعا مرا تحت تاثیر قرار داد. اول اینکه همه مغازه ها بین ۶ تا ۶:۳۰ بعد از ظهر تعطیل می کردند و  بعد از تعطیل کردن مغازه خود شروع به نظافت داخل و بیرون مغازه می کردند. میوه فروش ها، ماهی فروش ها و مغازه های لبنیاتی اطراف و محل قرار گیری اجناس خود را می شستند. دو م  اینکه بعد از تعطیلی مغازه های اصلی شروع به دست فروش ها می رسید. دست فروش ها بازار خود را درست جلوی مغازه هایی که اکنون بسته شده بودند به راه می انداختند. در دو روزی که به بازار رفتیم این دو نکته تکرار شدند.

حمل و نقل عمومی و رفت و آمد در شهر

برای رفت و آمد و گشت و گذار در شهر می توانید از اتوبوس، Tramway و تاکسی استفاده کنید. ما در طول مدتی که در استانبول بودیم از اتوبوس و ترم وای استفاده کردیم. همه کسانی که در مورد استانبول با آن ها صبحت کردیم به ما توصیه کردند که از تاکسی استفاده نکنیم. به گفته آن ها نرخ تاکسی بخصوص برای توریست ها خیلی گران است.

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

جزایر اطراف استانبول (Princes' Islands)

در اطراف استانبول چندین جزیره وجود دارد که در بین مردم بومی و گردشگران به Adalar معروف هستند. شما می توانید با استفاده از کشتی هایی که روزانه چندین بار به این جزایر رف و آمد می کنند به یکی از آنها بروید. ما به جزیره چهارم که به گفته خود آن ها بزرگترین جزیره و زیباترین آن ها بود رفتیم. در بدو ورود متوجه شدیم که این جزیره ساحل شنی ندارد و دور تا دور آن ساحل صخره ای کشیده شده است. بلیط رفت و برگشت به جزایر به پول ایران حدود ۸ هزار تومان بود. مدت زمان سفر هم بین  ۱ تا ۱:۳۰ ساعت با توجه به جزیره مقصد متفاوت بود.

صبحت پایانی

در صورتی که قصد سفر به استانبول دارید با توجه به وسعت جاذبه های گردشگری حداقل ۱ هفته در نظر بگیرید.

موفق باشید

۱۳۸۹/۰۳/۱۵

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

سلام :)

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

Export


دستور mysqldump برای گرفتن خروجی از پایگاه داده استفاده می شود. به عنوان مثال:
[bash]$ mysqldump -umy_user -p -R my_database > export.sql[/bash]
دستور بالا محتویات پایگاه داده my_database به همراه روتین های آن (پارامتر R) را در فایل export.sql ذخیره می کند.
در صورتی که پایگاه داده شما بر روی سرور قرار دارد می توانید با استفاده از پارامتر h و کاربر خودتان بر روی سرور مستقیم و بدون نیاز به ftp و ssh نسخه پشتیبان تهیه کنید:
[bash]$ mysqldump -umy_server_user -p -hserver_host -R my_database > export.sql[/bash]

Import


برای وارد کردن اطلاعات از دستور mysql استفاده می کنیم:
[bash]$ mysql -umy_user -p my_database < export.sql[/bash]
* به جهت علامت > توجه کنید.

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


برای ترکیب کردن این دو دستور از | استفاده می کنیم:
[bash]$ mysqldump -umy_user_1 -pmy_pass_1 -R my_database \
| mysql -umy_user_2 -pmy_pass_2 my_database[/bash]

*حداقل یکی از رمز عبورهای بالا (my_pass_1 یا my_pass_2) را باید وارد کنید.
البته Import کردن مستقیم از دستور Export خیلی جالب نیست. این دستور بیشتر زمانی کاربرد دارد که بخواهید یکی از جدول های پایگاه داده خود را بروز رسانی کنید:
[bash]
$ mysqldump -umy_user -pmy_pass_1 -R my_database my_table \
| mysql -umy_user -pmy_pass_2 my_database
[/bash]
دستور بالا ساختار و محتویات جدول my_table را بروزرسانی می کنید.

کاربرد دیگر ترکیب کردن Export و Import تهیه نسخه کاملا مشابه از پایگاه داده می باشد. دستورات زیر یک نسخه کاملا مشابه از پایگاه داده my_database با نام my_database_2 بر روی پایگاه داده ایجاد می کنید:
[bash]
$ 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
[/bash]

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

موفق باشید