PDA

View Full Version : استخراج دیتا بیس از یک سایت



ehsan_y
پنج شنبه 14 مرداد 1389, 18:25 عصر
سلام
توی سایت زیر یک تکست باکس وجود داره که می تونی توی اون یه متن رو وارد کنی و اون توی دیتا بیس سایت سرچ می کنه و اطلاعات رو بهت نشون می ده.
می خواستم بدونم چه جوری می تونم یه برنامه بنویسم که این برنامه مقادیری رو به سرور بفرسته و پاسخ رو توی یه فایل متنی ذخیره کنه
بصورت مفید و مختصرش اینه که می خوام بخشی از دیتا بیس این سایت رو استخراج کنم و داشته باشم.دستی امکان پذیره ولی خیلی وقت میگیره .
اینم آدرس سایت
http://www.heavens-above.com/selecttown.asp?CountryID=IR
ضمنا موضوع سایت اینه که اسم یه شهر یا آبادی رو سرچ می کنی و اونم مختصات جغرافیای اون مکان رو بت نشون میده.
اگه این موضوع نامربوطه خواهش میکنم مدیر سایت راهنمایی بفرماین که کجا باید مطرحش کنم.

ehsan_y
سه شنبه 19 مرداد 1389, 00:39 صبح
کس نیست جواب بده؟
اصلا این کار ممکنه یا نه؟

leonard
سه شنبه 19 مرداد 1389, 00:45 صبح
من این کد رو با python نوشتم
بی مشکل واسه اصفهان جواب داد
البته مقدار cookieرو از مرورگر خودت باید بگیری
وگرنه بهت خطا ۵۰۰ رو میده
نوشتن کد parser ,...هم با خودت

import httplib, urllib
cityname='esfahan'
headers = {"Content-type": "application/x-www-form-urlencoded","Cookie": "ASPSESSIONIDACBTTTRC=NCEEPMPDPBHANBJAKIJDIAGC"}

params = urllib.urlencode({'Search': cityname, 'CountryID': 'IR'})
conn = httplib.HTTPConnection("www.heavens-above.com:80")
conn.request("POST", "/selecttownquery.asp?lat=0&lng=0&alt=0&loc=Unspecified&TZ=CET", params,headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
print data
conn.close()

ehsan_y
پنج شنبه 21 مرداد 1389, 10:21 صبح
من این کد رو با python نوشتم
بی مشکل واسه اصفهان جواب داد
البته مقدار cookieرو از مرورگر خودت باید بگیری
وگرنه بهت خطا ۵۰۰ رو میده
نوشتن کد parser ,...هم با خودت

import httplib, urllib
cityname='esfahan'
headers = {"Content-type": "application/x-www-form-urlencoded","Cookie": "ASPSESSIONIDACBTTTRC=NCEEPMPDPBHANBJAKIJDIAGC"}

params = urllib.urlencode({'Search': cityname, 'CountryID': 'IR'})
conn = httplib.HTTPConnection("www.heavens-above.com:80")
conn.request("POST", "/selecttownquery.asp?lat=0&lng=0&alt=0&loc=Unspecified&TZ=CET", params,headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
print data
conn.close()


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

leonard
پنج شنبه 21 مرداد 1389, 21:09 عصر
خب قرار نیست تمام کد رو من بنویسم
اگه از ویندوز استفاده میکنی به python.org
برو و مفسرpython نسخه ویندوزی رو بگیر
و پس از نصب از خط فرمان اون رو یصورت زیر اجرا کنید
python yourprogram.py cityname
واگر هم دربرنامه نویسی مبتدی هستید پیتون بهترین نقطه آغاز هست و
سایتpylearn.comهم منبع آموزشی
این هم یک نسخه جدیدتر

import sys,httplib, urllib
cityname=sys.argv[1]
headers = {"Content-type": "application/x-www-form-urlencoded","Cookie": "ASPSESSIONIDACBTTTRC=NCEEPMPDPBHANBJAKIJDIAGC"}

params = urllib.urlencode({'Search': cityname, 'CountryID': 'IR'})
conn = httplib.HTTPConnection("www.heavens-above.com:80")
conn.request("POST", "/selecttownquery.asp?lat=0&lng=0&alt=0&loc=Unspecified&TZ=CET", params,headers)
response = conn.getresponse()
print response.status, response.reason
f=open(sys.argv[1]+'.html','a')
f.write(response.read())
conn.close()
f.close()

ehsan_y
جمعه 22 مرداد 1389, 01:56 صبح
ممنون خیلی لطف کردید
اتفاقا خودم اینکارو کردم و پیتون رو نصب کردم.
این برنامه عالیه ولی من کل صفحه برگشتی رو نمی خام فقط قسمتی که اطلاعات شهرها توش هست رو می خام.اگه بشه اونو جدا کرد فک کنم با یه حلقه for next بتونم اطلاعات رو به سایت بدهم و جواب رو بنحوی ذخیره کنم که برام قابل استفاده باشه.ضمنا می خواهم نتایج جستجو همش توی یه فایل ذخیره بشه.
مثلا یه فایل متنی که که هر سطرش یه رکورد باشه مثلا اینجوری :



mashahd 330.254 59.325 1245 khorasan
esfehan 320.231 56.324 954 esfehan



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


یه خورده بررسی کردم خروجی رو الان
در حقیقت من توی فایل ذخیره شده از اونجایی که نوشته شده <table> رو لازم دارم تا انتهاش.
یعنی اگه روشی رو به من نشون بدین که فقط این قسمت ذخیره بشه یا بقیه رو بعد از ذخیره بتونم پاک کنم مشکلم حل میشه . ممنون .

leonard
جمعه 22 مرداد 1389, 02:28 صبح
من خودم واسه یه سایت دیگه اول کل صفحه رو میگیرم
بعد با یک برنامه دیگه اون اطلاعات رو استخراج میکنم

ehsan_y
جمعه 22 مرداد 1389, 02:47 صبح
میشه اون برنامه رو به من معرفی کنید
آخه عرض کردم تعداد رکورد خروجی حداقل ده هزار تا میشه شاید هم به 80 یا 90 هزار برسه.