استخراج اطلاعات از سایت دیوار
سلام برای استخراج اطلاعات یک اگهی در سایت دیوار از
HtmlAgilityPack
استفاده میکنم همه رو با دستورات زیر واکشی میکنم به جز قیمت و تصاویر کسی میدونه باید چه کدی بزنم برای این دو پارامتر ؟
تو تصویر دوم میخوام فیلد قیمت 4،000،000 تومان رو واکشی کنم و همچنین یکی از تصاویر
ممنون میشم کسی پاسخ بدید
https://s6.uupload.ir/files/w_4ju1.png
https://s6.uupload.ir/files/2_87b6.png
آدرس لینک اگهی موبایل دیوار :
https://divar.ir/v/%D8%A7%D9%BE%D9%8...D8%B1/gYem0Nel
نقل قول: استخراج اطلاعات از سایت دیوار
سلام.
به نظر میاد قیمت و ... توسط درخواست های ایجکس در سایت فوق لود میشه، بنابراین باید از یک فریم ورک سمت کلاینت مانند Selenium Web Driver کمک بگیرید.
این نمونه ها برای بحث Unit Testing است، اما از درون اینها می تونی کدهای لازم برای کارت رو استخراج کنی.
نقل قول: استخراج اطلاعات از سایت دیوار
ممنون مهندس میشه با یه تیکه کد نشون بدید چطوریه از اون لینک چیزی نفهمیدم
من از asp mvc . net هم استفاده میکنم
نقل قول: استخراج اطلاعات از سایت دیوار
سلام و روز خوش
از این تصویری که پیوست کردن مشخصه که المنت نادرستی رو انتخاب کردین و برای همین این شبهه پیش آمده که قیمت و ... با ایجکس خونده میشه.
شما با مرورگر developer tools رو باز و با ابزار inspect مشخصات اون element رو که نیاز دارین پیدا کنین.
حالا در برنامه تون از هر روش و ابزار که استفاده میکنین باید ببینین چجوری به اون المان (یا مجموعه المانها) میرسین:
ممکنه getelementbyid , getelementsbyclassname , و .... باشه،
ممکنه که از xpath و selector های معینی استفاده کنه
و ...
این صفحه دیوار رو چک کردم همه چیزایی که نیاز دارین بصورت استاتیک لود شده : هم مشخصات (شامل قیمت) و هم آدرس همه عکسها در دسترسه.
اگر برای پیدا کردن این المانها مشکل داشتین بگین راهنمایی کنم.
نقل قول: استخراج اطلاعات از سایت دیوار
سلام مهندس منم با همین ابزار المنتور کروم این کار کردم ظاهرا نمیشه مقدار
فیلد قیمت فقط میخوام بقیه پارامترا مهم نیستن میشه راهنمایی کنید
4 ضمیمه
نقل قول: استخراج اطلاعات از سایت دیوار
2 ضمیمه
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول: استخراج اطلاعات از سایت دیوار
ممنون و لی داداش من اینا رو صد بار تست کردم مقدار قیمت روبر نمیگردونن هیچ کدوم
خواهشا یکی راهنمایی کنه حاضرم هزینه هم بدم فقط فیلد قیمت رو می خوام
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
sabzzz
من اینا رو صد بار تست کردم مقدار قیمت روبر نمیگردونن هیچ کدوم
شما قطعا یک جای کار دارین اشتباه میکنین - این خیلی سرراست و ساده است و کدش فکر کنم 10 خط نشه!
کد خودتون رو بگذارین تا معلوم بشه مشکل کجاست.
البته قیمت مستقیما مشخص نمیشه، یک مجموعه المنت هست که قیمت یکی از اونهاست (تو تصویر آخر پست شماره 6 کاملا واضح هست) ؛
شما باید از روی title پیدا کنین که کدوم value متناظر با "قیمت" است.
نقل قول:
حاضرم هزینه هم بدم
سایتای فریلنسری هست اگر میخواین هزینه کنین، فکر کنم چند ساعته و با مبلغ خیلی کمی انجام بدن.
1 ضمیمه
نقل قول: استخراج اطلاعات از سایت دیوار
شما کدهایی که نوشتید رو ارسال کنید.
ایتم قیمت هم مثل سایر ایتمها در دسترس میباشد.
ضمیمه 153833
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
336699
شما کدهایی که نوشتید رو ارسال کنید.
ایتم قیمت هم مثل سایر ایتمها در دسترس میباشد.
ضمیمه 153833
داده های درون تصویر ضمیمه شده رو از چه آدرسی بدست آوردید؟
من یک نگاه سر سری به Request/Response ها در تب Network در Developer Tools انداختم ندیدمش.
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
مهدی کرامتی
داده های درون تصویر ضمیمه شده رو از چه آدرسی بدست آوردید؟
من یک نگاه سر سری به Request/Response ها در تب Network در Developer Tools انداختم ندیدمش.
https://api.divar.ir/v8/posts/gYem0Nel
فقط کافیه توکن هر آگهی را جایگزین کنید تا اطلاعات آگهی را بصورت جیسون دریافت نمایید.
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
336699
آفرین!
دستاورد جالبی بود.
1 ضمیمه
نقل قول: استخراج اطلاعات از سایت دیوار
نتیجه گیری از بحث:
با تشکر از توضیحات شرکت کنندگان در بحث، ابتدا لازم است مدل های JSON خروجی API دیوار به کلاس های سی شارپ تبدیل شوند.
- برای انجام این کار یا از سایت Json2CSharp.com می توان استفاده کرد، و یا اینکه نتیجه خروجی JSON یکی از آیتم های API دیوار از خط 4 ببعد تا انتها را انتخاب کنید، یک کلاس خالی در ویژوال استودیو ایجاد کنید، از منوی Edit گزینه Paste Special، و سپس Paste JSON as Classes را انتخاب کنید. این کار منتهی به ایجاد تعدادی کلاس منطبق و معادل با آبجکت های JSON فوق می شود. در پروژه ضمیمه شده، کلاس های فوق در فایل Models.cs قرار دارند.
- پکیج Newtonsoft.Json را به پروژه اضافه کنید.
- یک Request به آدرس API دیوار به آدرس https://api.divar.ir/v8/posts/ بفرستید. بعد از / آخر میبایست کد کالای مورد نظر را اضافه کنید.
- نتیجه را با استفاده از کلاس JsonConvert به تایپ مورد نظر تبدیل کنید.
- شرح کالا از پراپرتی data.description و قیمت کالا از پراپرتی data.webengage.price به شکل یک عدد int قابل خواندن خواهد بود.
کل توضیحات فوق در قالب یک پروژه Windows Forms ضمیمه این پست شده است. در پروژه فوق علاوه بر شرح و قیمت، تصویرهای کالا نیز لود شده و در یک PictureBox نمایش داده می شود.
نکته: در این پروژه برای خواندن اطلاعات از وب از کلاس HttpDownloader استفاده شده است (داخل پروژه هست). مزیت این کلاس پشتیبانی GZIP است، یعنی اگر پاسخ وب سرور با استفاده از روش GZIP فشرده شده باشد این کلاس برای دسترسی به پاسخ های آن سرور به مشکل بر نمی خورد.
نقل قول: استخراج اطلاعات از سایت دیوار
دم همتون گرم کارم راه افتاد
فقط اگه میشد فیلد شماره موبایل آگهی هم واکشی کرد عالی میشد !
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
sabzzz
دم همتون گرم کارم راه افتاد
فقط اگه میشد فیلد شماره موبایل آگهی هم واکشی کرد عالی میشد !
واکشی شماره موبایل به این راحتی ها نیست. آدرس خواندن مشخصات آگهی دهنده این است:
https://api.divar.ir/v5/posts/Token}/contact/
در آدرس فوق بجای Token شناسه آگهی را قرار می دهید. منتهی فراخوانی موفق آدرس فوق نیازمند در اختیار داشتن یک Bearer Token است.
مقدار Bearer Token فقط پس از ورود با شماره موبایل به شما تخصیص داده میشه. پارامتر خروجی تابع ورود به سیستم یک توکن هست، از همون توکن بعنوان Bearer Token برای فراخوانی تابع هایی که نیاز به لاگین بودن بیننده دارند (مثل تابع Contact، برای دریافت مشخصات آگهی دهنده از جمله شماره موبایل) استفاده خواهد شد.
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
sabzzz
دم همتون گرم کارم راه افتاد
فقط اگه میشد فیلد شماره موبایل آگهی هم واکشی کرد عالی میشد !
سلام
برای دریافت شماره آگهی ها محدودیت های زیادی از طرف سایت اعمال شده.
در مرحله اول شماره موبایل خودتان را به سایت ارسال کنید و یک پیامک برای شما ارسال میشه و شما اون کد رو برای سایت ارسال میکنید در صورتی که کد ارسالی صحیح باشد یک توکن برای شما ارسال میشه.
در مرحله بعد برای دریافت شماره آگهی ها باید اون توکن را برای سایت ارسال کنید تا شماره آگهی را دریافت کنید.
محدودیت اصلی از همینجا شروع میشه
شما روزانه فقط حدود 200 در خواست میتوانید ارسال کنید بعد از اون درخواستهای شما به مدت 24 از طرف سایت بلاک میشه.
اگر چند روز پشت سرهم بلاک شدید این محدویت بلاک به یک هفته افزایش پیدا میکنه.
اون توکن دریافتی هم چند روز بیشتر اعتبار نداره و باید مجداد تمدید بشه.
نقل قول: استخراج اطلاعات از سایت دیوار
مرسی بابت اطلاعات مفیدتون.
نقل قول:
شما روزانه فقط حدود 200 در خواست میتوانید ارسال کنید بعد از اون درخواستهای شما به مدت 24 از طرف سایت بلاک میشه.
کسی اگر به اندازه کافی سریش باشه می تونه یک تعداد شماره رو بهمراه توکن هاش تو دیتابیس نگهداره، و با هر توکن در روز مثلا 199 تا آگهی رو بخونه، بعد سویچ کنه روی شماره بعدی.
نقل قول:
اون توکن دریافتی هم چند روز بیشتر اعتبار نداره و باید مجداد تمدید بشه.
اون توکن اصولا باید حالت Sliding Expiration داشته باشه، یعنی زمان و تاریخ انقضاش، به اندازه تعریف شده، از آخرین استفاده محاسبه بشه. اگر تجربه شما عکس این رو ثابت کرده لطفا بیان کنید.
نقل قول: استخراج اطلاعات از سایت دیوار
یه سری افراد دارن contact هارو سلکت میکنن ایا روشی هست برای دور زدن محدودیت از لوگین ؟ یا رباتی نوشته بشه خودش لوگین کنه بفرست شماره موبایل رو
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
آیا روشی هست برای دور زدن محدودیت از لوگین ؟
خیر. روش خاصی نداره. در حالت بدون لاگین، سیستم سایت دیوار شماره آگهی گذارنده رو ماسک می کنه (نصف شماره با *** جایگزین شده)، منطقی هم هست که برای حفاظت از مشتری هاش اینکار رو بکنه.
نقل قول:
یا رباتی نوشته بشه خودش لوگین کنه بفرست شماره موبایل رو
ربات تقریبا همین نرم افزاری است که بالاتر ضمیمه کردم و در تعریف، نرم افزاری است که کار مورد نظر رو خودکار انجام بده. تمام کدهای مورد نیاز نرم افزار خودکار فوق تو مثال ضمیمه شده هست، مابقی ماجرا مثل سویچ کردن شماره ها و ... رو هم توضیح دادم. تنها بخشی که باقی می ماند این است که یک Scheduler به پروژه اضافه کنید که خودش در بازه های زمانی تعریف شده روتین های فوق رو اجرا کنه.
نقل قول: استخراج اطلاعات از سایت دیوار
نقل قول:
نوشته شده توسط
مهدی کرامتی
واکشی شماره موبایل به این راحتی ها نیست. آدرس خواندن مشخصات آگهی دهنده این است:
https://api.divar.ir/v5/posts/Token}/contact/
در آدرس فوق بجای Token شناسه آگهی را قرار می دهید. منتهی فراخوانی موفق آدرس فوق نیازمند در اختیار داشتن یک Bearer Token است.
مقدار Bearer Token فقط پس از ورود با شماره موبایل به شما تخصیص داده میشه. پارامتر خروجی تابع ورود به سیستم یک توکن هست، از همون توکن بعنوان Bearer Token برای فراخوانی تابع هایی که نیاز به لاگین بودن بیننده دارند (مثل تابع Contact، برای دریافت مشخصات آگهی دهنده از جمله شماره موبایل) استفاده خواهد شد.
ضمن تشکر در مورد Bearer Token کمی بیشتر توضیح میدید وقتی با موبایل لاگین شدیم کجا سورس دنبالش بگردیم؟
ممنون
نقل قول: استخراج اطلاعات از سایت دیوار
معمولا تو ریسپانسی که بعد از لاگین بهتون میده تو هدر یا بادی ریسپانس Bearer Token هست و میشه خوندش.
نقل قول: استخراج اطلاعات از سایت دیوار
من در حال نوشتن برنامه ای برای استخراج شماره ها از سایت دیوار هستم. برنامه شما اطلاعات توضیحات و عکس رو می ده.
برای دریافت شماره تماس در لینک https://api.divar.ir/v5/posts/{Token}/contact/ در قسمت {Token} شناسه آگهی رو قرار میدم ولی نمی دونم Bearer Tokenی که توی کوکی سایت دارم رو چه جوری برستم. توی هدرها قسمتheader.cookie یا header.token مقدار کامل کوکی که با =did شروع میشه و یا فقط مقدار token بعد از لاگین رو میذارم ولی جواب not found بر می گردونه. در صورت امکان راهنمایی کنید.
نقل قول: استخراج اطلاعات از سایت دیوار
بابرنامه Postman می تونم تست کنم و post بفرستم و هنوز نتونستم جواب بگیرم