كيف يمكنني الحصول على الصورة برمجيًا على هذه الصفحة؟

StackOverflow https://stackoverflow.com/questions/1372750

  •  21-09-2019
  •  | 
  •  

سؤال

عنوان URL http://www.fourmilab.ch/cgi-bin/earth يظهر خريطة حية للأرض.

إذا قمت بإصدار عنوان URL هذا في متصفحي (FF) ، فإن الصورة تظهر على ما يرام. لكن عندما أحاول "wget" لجلب نفس الصفحة ، فشلت!

هذا ما جربته أولاً:

wget -p http://www.fourmilab.ch/cgi-bin/Earth

التفكير ، أنه من المحتمل أن تكون جميع حقول النماذج الأخرى مطلوبة أيضًا ، قمت بعمل "مصدر عرض" في الصفحة أعلاه ، ولاحظت قيم الحقل المختلفة ، ثم أصدرت عنوان URL التالي:

wget --post-data "opt=-p&lat=7°27'&lon=50°49'&ns=North&ew=East&alt=150889769&img=learth.evif&date=1&imgsize=320&daynight=-d" http://www.fourmilab.ch/cgi-bin/Earth

لا تزال لا صورة!

هل يمكن لأحد أن يخبرني ما الذي يحدث هنا ...؟ هل هناك أي "مسكات" مع CGI و/أو wgets القائمة على النماذج؟ أين (كتاب أو مورد عبر الإنترنت) سيتم شرح مثل هذه المفاهيم؟

هل كانت مفيدة؟

المحلول

إذا قمت بفحص الكود المصدري للصفحة ، فهناك رابط مع IMG في الداخل ، يحتوي على صورة الأرض. علي سبيل المثال:

<img 
 src="/cgi-bin/Earth?di=570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229" 
 ismap="ismap" usemap="#zoommap" width="320" height="320" border="0" alt="" /> 

دون إعطاء المعلمة "DI" ، فأنت فقط تطلب صفحة ويب كاملة ، مع إشارات إلى هذه الصورة ، وليس للصورة نفسها.

تحرير: معلمة "di" تشفر "جزء" من الأرض التي تريد تلقيها ، على أي حال ، حاول على سبيل المثال

wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3CEF7A1044FA32907855BA5C8F

نصائح أخرى

استخدام الحصول على بدلا من النشر. إنها مختلفة تمامًا عن برنامج CGI في الخلفية.

يتبع من Ravadre ،

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

يقوم بتنزيل ملف XHTML الذي يحتوي علىu003Cimg> بطاقة شعار.

لقد قمت بتحرير XHTML لإزالة كل شيء ما عدا علامة IMG وحوّلتها إلى برنامج نصي bash يحتوي على أمر wget -p آخر ، يهرب من؟ و =

عندما نفذت هذا ، حصلت على ملف 14 كيلو بايت أطلق عليه اسم Earth.jpg

ليس صحيحا البرنامج, ، الطريقة التي فعلت بها ، لكنني أعتقد أنه يمكن القيام به.

ولكن كما قال Somedeveloper ، تتغير قيمة DI (لأنه يعتمد على الوقت).

يا رفاق ، هذا ما فعلته أخيرًا. لست سعيدًا تمامًا بهذا الحل ، حيث كنت (وما زلت) على أمل طريقة أفضل ... واحدة تحصل على الصورة في أول WGET نفسها ... أعطتني نفس تجربة المستخدم التي أحصل عليها عند التصفح عبر Firefox.

#!/bin/bash

tmpf=/tmp/delme.jpeg
base=http://www.fourmilab.ch
liveurl=$(wget -O - $base/cgi-bin/Earth?opt=-p 2>/dev/null | perl -0777 -nle 'if(m@<img \s+ src \s* = \s* "(/cgi-bin/Earth\?di= .*? )" @gsix) { print "$1\n" }' )
wget -O $tmpf $base/$liveurl &>/dev/null

ما تقوم بتنزيله هو صفحة HTML بأكملها وليس الصورة. لتنزيل الصورة والعناصر الأخرى أيضًا ، ستحتاج إلى استخدام --page-requisites (ومحتمل --convert-links) المعلمات). للأسف بسبب robots.txt لا يسمح بالوصول إلى عناوين URL /cgi-bin/, ، لن يقوم WGT بتنزيل الصورة الموجودة تحت /cgi-bin/. AFAIK لا توجد معلمة لتعطيل بروتوكول الروبوتات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top