2012-03-16 11 views
6

के साथ लिंक के href में जावास्क्रिप्ट को निष्पादित करना मैं पाइथन का उपयोग कर साइट पर कुछ पीडीएफ डाउनलोड करने की कोशिश कर रहा हूं (http://bibliotecadigitalhispanica.bne.es)।पायथन

मैंने urllib/urllib2/मशीनीकरण मॉड्यूल का उपयोग करने का प्रयास किया है (जिसे मैं अन्य साइटों के लिए उपयोग कर रहा हूं: इसमें यूआरएलओपेन, urlretrieve, आदि जैसे मानक फ़ंक्शन शामिल हैं), लेकिन यहां, लिंक में जावास्क्रिप्ट एम्बेडेड है href गुण जो कुछ प्रसंस्करण करता है और पीडीएफ खोलता है, जो कि इन मॉड्यूल को कम से कम जो मैंने यहां पढ़ा है, उससे संभाल नहीं पा रहा है। उदाहरण के लिए, जब मैं निम्न करें:

request = mechanize.Request('the example url below') 
response = mechanize.urlopen(request) 

यह सिर्फ युक्त HTML पृष्ठ वापस मिल - मैं तो बस (उस पृष्ठ के अंदर यह करने के लिए कोई लिंक या तो, देखते हैं) पीडीएफ निकालने के लिए नहीं कर पा रहे।

मैं एक असली ब्राउज़र में हेडर के माध्यम से देख (Firefox में LiveHTTPHeaders एक्सटेंशन का उपयोग कर) कि HTTP अनुरोध का एक बहुत बना रहे हैं और अंत में पीडीएफ दिया जाता है (और ब्राउज़र में प्रदर्शित) से पता है। मैं इसे रोकने और इसे डाउनलोड करने में सक्षम होना चाहता हूं। कंक्रीटली, मुझे 302 और 304 प्रतिक्रियाओं की एक श्रृंखला मिलती है, अंततः पीडीएफ की ओर अग्रसर होती है।

यहां एक लिंक विशेषता का एक उदाहरण दिया गया है जो मैं क्रॉल कर रहा हूं: href = 'जावास्क्रिप्ट: open_window_delivery ("http://bibliotecadigitalhispanica.bne.es:80/verylonglinktoaccess");'

ऐसा लगता है कि अगर मैं href विशेषता में एम्बेडेड इस जावास्क्रिप्ट को निष्पादित करता हूं, तो मैं अंततः पीडीएफ दस्तावेज़ तक पहुंच सकता हूं। मैंने सेलेनियम के साथ प्रयास किया है, लेकिन यह एक उलझन में है - मुझे पूरा यकीन नहीं है कि इसका दस्तावेज़ीकरण पढ़ने पर इसका उपयोग कैसे किया जाए। क्या कोई एक तरीका सुझा सकता है (या तो एक मॉड्यूल के माध्यम से मैंने कोशिश नहीं की है या मेरे पास है) कि मैं यह कर सकता हूं?

इसके साथ किसी भी मदद के लिए आपको बहुत बहुत धन्यवाद।

पुनश्च: http://bibliotecadigitalhispanica.bne.es/R/9424CFL1MDQGLGBB98QSV1HFAD2APYDME4GQKCBSLXFX154L4G-01075?func=collections-result&collection_id=1356

+0

क्या आप यूरी निकालने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं? – max

+0

मैंने यह भी करने की कोशिश की है, यूआरआई को जावास्क्रिप्ट फ़ंक्शन कॉल के अंदर से खींचकर और फिर मैकेनाइजेशन और urllib2 के साथ उस तक पहुंचने का प्रयास कर रहा है, लेकिन अब तक कोई भाग्य नहीं है - यह मुझे केवल HTML पृष्ठ को वापस देता है: -/देखने से हेडर, ऐसा लगता है कि कुछ यूआरआई के साथ कई अनुरोध किए गए हैं, जिनमें कुछ रीडायरेक्ट भी शामिल हैं। क्या इन सभी प्रतिक्रियाओं को पकड़ने का कोई तरीका है? शायद यह भी समस्या को हल कर सकता है। वैसे, प्रतिक्रिया के लिए धन्यवाद। – spanport

+0

अपडेट: मैं इस विशेष साइट पर पीडीएफ फाइलों के सबसे नज़दीकी यूआरएल की संरचना ढूंढकर और फिर उनसे रीडायरेक्ट करके इस साइट पर इसके चारों ओर एक रास्ता खोजना समाप्त कर दिया। चीयर्स! सेलेनियम के लिए – spanport

उत्तर

1
: मामले में आप क्या मैं दोहराने के लिए, मैं PDF (PDF प्रतीक हैं) को निम्न पृष्ठ पर ऊपर उल्लेख किया लिंक का उपयोग करने की कोशिश कर रहा हूँ :) कोशिश कर रहा हूँ देखना चाहेंगे

जावास्क्रिप्ट: open_window_delivery ("http://bibliotecadigitalhispanica.bne.es:80/webclient/DeliveryManager?application=DIGITOOL-3 & मालिक = resourcediscovery & custom_att_2 = simple_viewer & forebear_coll = 1333 उपयोगकर्ता & = अतिथि & pds_handle = & पीआईडी ​​= 1,673,416 & con_lng = एसपीए & rd_session = ht tp: //bibliotecadigitalhispanica.bne.es: 80/आर/7IUR42HNR5J19AY1Y3QJTL1P9M2AN81RCY4DRFE8JN5T22BI7I-03416 ");

वह यूआरएल 302 पेज की ओर जाता है। यदि आप इसका अनुसरण करते हैं, तो आप एक फ्रेम पेज पर समाप्त होते हैं, जहां नीचे फ्रेम सामग्री पृष्ठ होता है।

http://bibliotecadigitalhispanica.bne.es///exlibris/dtl/d3_1/apache_media/L2V4bGlicmlzL2R0bC9kM18xL2FwYWNoZV9tZWRpYS8xNjczNDE2.pdf

(lib) कर्ल 302 पृष्ठों का अनुसरण कर सकते हैं।

जावास्क्रिप्ट अब तक समस्या नहीं है। फिर आप single_viewer_toolbar2.jsp पर हैं, जहां फ़ंक्शन सेट LabelMetadataStream पीडीएफ के लिए यूआरएल को एक साथ रखता है, इसे अपने iframe "sendRequestIFrame" पर सबमिट करने से पहले।

  1. जावास्क्रिप्ट-निष्पादन दृष्टिकोण:

    मैं 3 संभावनाओं को देखने उच्च जटिलता, कोड के बहुत सारे, शायद भंगुर

  2. कुछ एक ब्राउज़र के आधार पर कार्यक्रम की जरूरत है: सेलेनियम शायद अच्छा है। मुझे पता है कि elinks2 में जावास्क्रिप्ट समर्थन है, और इसके विकिपीडिया पेज के अनुसार इसे "पर्ल, रूबी, लुआ और जीएनयू गुइल" में लिखा जा सकता है।
  3. सहायता के लिए वेब व्यवस्थापक से पूछें। आपको बॉट्स के प्रति अपनी नीति/दृष्टिकोण को समझने के लिए वैसे भी ऐसा करना चाहिए। शायद वे आपको इंटरफेस/एपीआई के साथ (और अन्य) प्रदान कर सकते हैं।

मैं सेलेनियम के बारे में अधिक जानने की सलाह देता हूं, यह सबसे आसान लगता है।

+0

+1, जो शायद सबसे अधिक सचेत (कम से कम काम) समाधान है। और "व्यवस्थापक से पूछें" के लिए एक और +1। –

+0

यह काम कर रहा है। धन्यवाद! – spanport