Scrapy অনুসরণ করার আগে রিডাইরেক্ট দেখাতে পারে
রিকোয়েস্ট মেটাডেটার মাধ্যমে একটি প্রক্সি GET-এর প্রাথমিক রিডাইরেক্ট স্ট্যাটাস ও Location সাময়িকভাবে প্রকাশ করুন, রিডাইরেক্ট হ্যান্ডলিংকে HTTP-ত্রুটি ফিল্টারিং থেকে আলাদা রেখে।
একটি প্রক্সি GET একটি সার্ভারে পৌঁছে তারপর রিডাইরেক্ট অনুসরণ করতে পারে, শেষ পর্যন্ত ব্যর্থতা প্রথম প্রতিক্রিয়াটিকে ঢেকে দেয়। নির্ণয়ের জন্য সেই প্রাথমিক প্রতিক্রিয়া প্রকাশ করুন:
request = scrapy.Request(
'https://service.example/page',
callback=inspect_redirect,
meta={
'proxy': 'http://proxy.example:8080',
'dont_redirect': True,
'handle_httpstatus_list': [301, 302, 303, 307, 308],
},
)
স্পাইডারের বিদ্যমান start বা callback প্রবাহের মাধ্যমে এই রিকোয়েস্টটি শিডিউল করুন। অনুমোদিত পাবলিক-পেজ প্রোবের জন্য HTTP প্রক্সি তালিকা রিকোয়েস্টের প্রক্সি URL-এর জন্য প্রার্থী সরবরাহ করে। inspect_redirect-এর উচিত প্রতিক্রিয়ার স্ট্যাটাস ও Location হেডার রেকর্ড করা, আবার অন্ধভাবে অনুসরণ না করা।
dont_redirect এই রিকোয়েস্টের জন্য স্বয়ংক্রিয় রিডাইরেক্ট বন্ধ করে। handle_httpstatus_list উল্লিখিত স্ট্যাটাসগুলোকে HTTP-ত্রুটি ফিল্টারিং দ্বারা প্রত্যাখ্যাত না হয়ে callback-এ পৌঁছাতে দেয়। সেটিংসগুলো ভিন্ন middleware দায়িত্ব সামলায়।
রিডাইরেক্ট কী বেছে নেয় তা যাচাই করুন: কাঙ্ক্ষিত ক্যানোনিকাল URL, ভিন্ন স্কিম বা হোস্টনেম, লগইন পেজ বা পুনরাবৃত্ত চক্র। সফল পরিবহনের পরে পাওয়া 302 প্রক্সি সংযোগ খুলতে ব্যর্থ হওয়ার থেকে ভিন্ন পর্যবেক্ষণ।
স্বাভাবিক রিডাইরেক্ট হ্যান্ডলিং পুনরুদ্ধার হলে, Scrapy প্রতিক্রিয়ার রিকোয়েস্ট মেটাডেটায় redirect_urls ও redirect_reasons প্রকাশ করে। এগুলো পুরো ক্রলের জন্য রিডাইরেক্ট নিষ্ক্রিয় না রেখেই চূড়ান্ত ফলাফলের পথ সংরক্ষণ করতে পারে।
চূড়ান্ত প্রতিক্রিয়া স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনের উদ্দিষ্ট পেজ নয়। গন্তব্য ও প্রতিক্রিয়ার বিষয়বস্তু রাউটিং নির্ণয়ের সঙ্গে রাখুন।