PDA

View Full Version : حرفه ای: ساخت اسپمر و گرابر بلاگفا



kitcat_m18
چهارشنبه 27 مهر 1390, 00:46 صبح
سلام،

من يه گرابر حرفه اي براي جمع آوري ليسا وبلاگ هاي بلاگفا ساختم که سه قابليت اساسي داره:
1 - توانايي جمع آوري وبلاگ ها بدون تکرار
2 - ذخيره نام وبلاگ، عنوان وبلاگ و دسته در ديتابيس
3 - امکان انتخاب نوع وبلاگ از 60 عنوان مختلف

يه اسپمر هم براش نوشتم که کار مي کنه اما احتياج به يه سري کمک ها براش دارم
مي خوام ببينم کسي علاقه داره تا سورس رو قرار بدم و روش کار کنيم؟؟؟:متفکر:
گربر آمادست همينطور اسپمر اما هر دو بهينه سازي احتياج دارن که من زياد حوصلشو ندارم
موفق باشين :لبخندساده:

xrezax
چهارشنبه 27 مهر 1390, 17:49 عصر
سورسو اگه بزاری عالی میشه؛

kitcat_m18
چهارشنبه 27 مهر 1390, 23:19 عصر
سلام،

من پيشنهاد ميدم سورسو در قالب آموزش هاي گام به گام براي ساخت يه گرابر و اسپمر قرار بدم براي همين اين کارو شروع مي کنم در عوض براي InterActive بودن مبحث دوستان هم لطف کنن همراه با آموزش هايي که خدمتتون قرار ميدم فرم ها رو بسازيد و پيوست کنيد تا يه طرح قشنگ به همراه هم ديگه براي UI برنامه در بياريم.

براي ارسال هرز نامه يا همون Spam به سرويس دهنده هايي که از بازديد بالايي برخوردار هستند مانند وبلاگ ها بايد يه روبات ساخته بشه.

من در اينجا سعيم آموزش ساخت يه روبات براي بلاگفا هست که گام به گام مراحل زير رو انجام بده:

1 - ابتدا بايد يه سري لينک رو به عنوان صفحاتي که قراره ليست وبلاگ ها از اونا جمع آوري بشه به نرم افزار معرفي کنيم

نکته: ممکنه اين لينک ها اضافه يا کم و يا حتي براي جلوگيري از اسپم و يا هر دليل ديگه اي توسط مدير سايت عوض بشه پس بايد لينک ها رو با قابليت ويرايش براي برنامه محيا کنيم. به دليل وجود مراحل ديگه اي که درپيش داريم پيشنهاد ميکنم لينک ها رو تو يه Table در بانک اکسس قرار بديم و ار رجيستري و يا Flat File استفاده نشه

من قبلا اينکارو کردم و لينک ها رو به همراه عناوين در يه فايل اکسس جمع آوري کردم که در پيوست قرار دادم

ساختار جدول به صورت زير مي باشد:



Table Name: Dasteha
-----------------------------
ID AutoNumber
LinkName Text
URL Text

kitcat_m18
پنج شنبه 28 مهر 1390, 01:36 صبح
در ادامه براي استفاده از اطلاعات موجود يک نرم افزار به شرح زير احتياج مي باشد:

1- لود کردن اطلاعات مربوط به جدول Dasteha در کمبو باکس
2- ساخت يک مرورگر و هدايت به آدرس انتخاب شده توسط کاربر

نمونه فرم رو طراحي کردم و در ضميمه قرار دادم.

ali190
پنج شنبه 28 مهر 1390, 09:40 صبح
سلام
پروژه باز نمیشه
نیاز به ieframe.dll داره
لطفاً این dll رو پیوست کنید
یاعلی

kitcat_m18
پنج شنبه 28 مهر 1390, 16:24 عصر
سلام علي عزيز،
به پوشه Tools مراجعه کن فايل IRFrameFix.Reg رو اجرا کن.
توضيح: وقتي در VB از کنترل Webbrowser استفاده مي کنين معمولا به اين مشکل بر مي خورين که با اجراي فايل فوق تصحيح مي شود.

توضيح بيشتر اينکه ابتدا فايل مذبور را اجرا نموده و سپس اقدام به اجرا پروژه نماييد.

موفق باشيد.

kitcat_m18
پنج شنبه 28 مهر 1390, 16:39 عصر
سلام دوباره،
در مرحله قبل ليست صفحاتي را که لينک هاي وبلاگ در آنها قرار دارد را درون پايگاه داده قرار داديم، سپس اقدام به ساخت يک مرورگر براي هدايت به اين لينک ها نموديم، حال نوبت جمع آوري لينک ها شده است!

به عنوان پيشنهاد سه راه براي جمع آوري لينک ها پيش رو داريم:

1 - نوشتن يک Function:
با استفاده از توابعي مانند Mid, InStr, Right, Left و هر تابعي که در اين خصوص مورد نياز باشد. به اين صورت که با نشان قرار دادن کلماتي مانند Blogfa.Com. و يا \\:Http و يا .WWW و هر ساختار ديگري که مورد نياز براي تشخيص ساختار يک لينک در صفحه باشد کمک بگيريم و اقدام به جستجو در صفحه و جمع آوري تک تک لينک ها و سپس ذخيره آنها نماييم.

2 - استفاده از خود WebBrowser و دستورات جاوا اسکريپت: روش خوبي است اما تمام خواسته هاي ما را برطرف نمي کند (توضيح داده خواهد شد)

3 - استفاده از عبارات با قاعده: راهکار بالا در مقايسه با ابزاري تحت عنوان عبارات با قاعده چندان کار آمد نيست ما مي توانيم براي اين منظور از کتابخانه عبارات منظم که به عربي افعال باقاعده و در انگليسي Regular Expressions ناميده مي شوند استفاده نماييم.

عبارات منظم چيست؟

در علم رایانه، عبارت باقاعده (به انگليسي: regular expressions)، که تحت عنوان regex یا regexp نیز نام می‌برند به معنی تطبیق رشته در متن است، که از قبیل نویسه‌های خاص، کلمات و الگوهایی از نویسه‌ها می‌باشد. یک عبارت باقاعده با زبان معمولی نوشته می‌شود که می‌تواند توسط یک پردازشگر عبارت باقاعده، یا یک برنامه که به عنوان تولیدکنندهٔ مترجم (به انگليسي: Parser Genterator یا Compiler Generator) یا بررسی‌کنندهٔ متن و تشخیص قسمت‌هایی از آن به وسیلهٔ مشخصات استفاده شود.
این نمونه‌ها می‌توانید قابلیت‌ها محدودی که عبارت با قاعده می‌تواند انجام دهد را نشان دهد:


دنباله‌ای از نویسه‌های «car» در هر متن، از قبیل «car»، «cartoon» یا «bicarbonate»
لغت «car» در زمانی که به صورت جداگانه استفاده شود
لغت «car» وقتی که قبل از «blue» یا «red» آمده باشد
یک نویسهٔ «$» که پس از آن یک یا چند رقم بیاید و پس از آن به صورت اختیاری یک ممیز بیاید و پس از ممیز دقیقاً دو رقم اضافه قرار داشته باشد (مانند ‎«$10»‎ یا ‎«$245.99»‎)

عبارت‌های باقاعده می‌توانند خیلی پیچیده‌تر از این مثال‌ها باشند.

عبارات با قاعده بيشترين کاربرد را در سيستم عامل Linux دارند در صورتي که علاقه به يادگيري دقيق تر اين موضوع داريد فايل پيوست (گردآوري شده توسط علي قنواتيان) را دريافت نماييد.

kitcat_m18
پنج شنبه 28 مهر 1390, 18:01 عصر
حال اقدام به نوشتن Function ساده اي در رابطه با جمع آوري لينک ها از متن مي کنيم



Private Function SearchInSTR(ByVal HTMLFile As String, ByVal List As ListBox)
Dim EndLinkPosition As Long, StartLinkPosition As Long
Dim CurrentLink As String

EndLinkPosition = 0

Do While InStr(EndLinkPosition + 1, HTMLFile, ".blogfa.com") <> 0

CurrentLink = InStr(EndLinkPosition + 1, HTMLFile, ".blogfa.com")
EndLinkPosition = CurrentLink

If EndLinkPosition <> 0 Then

CurrentLink = InStrRev(HTMLFile, "http://", EndLinkPosition)
StartLinkPosition = CurrentLink

List.AddItem Mid(HTMLFile, CurrentLink, (EndLinkPosition - StartLinkPosition) + 11)
End If
Loop
End Function



به دو دليلي استفاده از Function فوق براي جمع آوري لينک ها کار جالبي نيست:
1- بعضي وقتا به دليل وجود نداشتن عبارات مشخص شده توسط ما درون لينک لينک هاي اشتباه دريافت مي شوند مانند:
http://romak133.blogfa.com" target="_blank" >Blog</a><br><span class="des">romak133.blogfa.com
2- کد فوق عبارات موجود در تگ Title رو هم به علت شباهت رشته به لينک سايت جمع آوري مي کنه

قسمتي که با رنگ قرمز مشخص کرده ام توسط Function انتهاي لينک شناخته شده است اما چون ابتداي لينک عبارت "//:http" را ندارد تا اولين "//:http" موجود رشته را جستجو مي کند اما مسلما ساختار لينک اشتباه است

نکته: با کار بيشتر بر روي Function فوق مي توان اين اشکالات را برطرف نمود اما دليلي براي اين کار وجود ندارد

در صورتي که مي خواهيد از مرورگر پروژه قبلي براي به دست اوردن لينک ها استفاده نماييد:
WebBrowser1.Document.Body.innerHTML
با اين دستور مي توان سورس صفحه اي را که در مرورگر بارگزاري شده است را دريافت نمود.

سورس کد در ضميمه پيوست شده است

kitcat_m18
پنج شنبه 28 مهر 1390, 18:43 عصر
ابتدا بهتره يکي از دستورات WebBrowser رو معرفي کنيم: WebBrowser1.Document.links
اين دستور داراي پارامتر هاي زيادي مي باشد که در اينجا از دو پارامتر استفاده مي کنيم:
Length تعداد لينک هاي موجود در صفحه
Item اشاره دارد به ايندکس لينک موجود در صفحه

در نتيجه با توجه به نکات فوق:


Private Sub Grabber_Click()
Dim i As Integer
Dim Str As String

List1.Clear

With Expert_Browser
For i = 0 To .WebBrowser1.Document.links.Length - 1
Str = .WebBrowser1.Document.links.Item(i)

If Left$(LCase(Str), 4) = "http" And Right(Str, 12) = ".blogfa.com/" Then
List1.AddItem (.WebBrowser1.Document.links.Item(i))
End If
Next i
End With

MsgBox "End Proccess"
End Sub


نکته: دستورات بعد از عبارت WebBrowser1.Document در کتابخانه ويژوال بيسيک موجود نيستند (چرا؟) زيرا اين دستورات دستورات VB نيستند بلکه دستورات جاوا اسکريپت هستند که با مرورگر WebBrowser به کار مي بريم

ايشالا در پروژه هاي آيندتون اگه نياز به دستوري براي کار با WebBrowser داشتيد مي تونين از انجمن جاوا هم کمک بگيريد.

کد فوق روش خوبي است اما تمام خواسته هاي ما را برآورده نمي کند (چرا؟)
به نظر من يه گرابر خوب بايد عنوان وبلاگ ها رو نيز جمع آوري کنه نظر شما چيه؟؟؟ :متفکر:

xxxxx_xxxxx
پنج شنبه 28 مهر 1390, 20:13 عصر
سلام،
بحث و گفتگو پیرامون کلیه نرم افزارهای مخرب از جمله اسپمرها ممنوع است.
کاش قبل از ایجاد تاپیک جدید، قوانین انجمن رو میخوندید.

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

با تشکر/