একটি স্থিতিশীল এবং দক্ষ উপায়ে কোনও ওয়েব পৃষ্ঠা থেকে ডেটা প্রাপ্ত করা Get


11

সম্প্রতি আমি শিখেছি যে আপনার প্রয়োজনীয় ডেটা পাওয়ার জন্য কোনও ওয়েবসাইটের এইচটিএমএলকে বিশ্লেষণ করার জন্য একটি রেজেক্স ব্যবহার করা সেরা ক্রিয়াকলাপ নয়।

সুতরাং আমার প্রশ্নটি সহজ: তবে কী, সবচেয়ে ভাল / সবচেয়ে দক্ষ এবং একটি সাধারণ স্থিতিশীল উপায় এই ডেটা পাওয়ার জন্য?

আমি এটা নোট করা উচিত:

  • কোনও এপিআই এর নেই
  • অন্য কোনও উত্স নেই যেখানে আমি ডেটা পেতে পারি (কোনও ডাটাবেস, ফিড এবং এ জাতীয় নয়)
  • উত্স ফাইলগুলিতে কোনও অ্যাক্সেস নেই। (পাবলিক ওয়েবসাইট থেকে প্রাপ্ত ডেটা)
  • ধরা যাক ডেটাটি স্বাভাবিক পাঠ্য, এইচটিএমএল পৃষ্ঠায় একটি টেবিলটিতে প্রদর্শিত হয়

আমি বর্তমানে আমার প্রকল্পের জন্য অজগর ব্যবহার করছি তবে একটি ভাষার স্বাধীন সমাধান / টিপস ভাল লাগবে।

একটি পার্শ্ব প্রশ্ন হিসাবে: ওয়েবপেজটি আজাক্স কল দ্বারা নির্মিত হলে আপনি কীভাবে তা ব্যবহার করবেন?

সম্পাদনা করুন:

এইচটিএমএল পার্সিংয়ের ক্ষেত্রে, আমি জানি যে ডেটা পাওয়ার কোনও স্থিতিশীল উপায় নেই। পৃষ্ঠা পরিবর্তন হওয়ার সাথে সাথেই আপনার পার্সারটি সম্পন্ন করা হবে। এই ক্ষেত্রে স্থিতিশীলের সাথে আমি কী বোঝাতে চাইছি তা হল: পৃষ্ঠাটি বিশ্লেষণের একটি কার্যকর উপায়, যা সর্বদা আমাকে একই ফলাফল দেয় (স্পষ্টরূপে ডেটার একই সেটের জন্য) যদি পৃষ্ঠার পরিবর্তন না হয় not


8
কোনও স্থিতিশীল উপায় নেই, আপনি কীভাবে আপনার স্ক্র্যাপিং বাস্তবায়ন করুন তা সহজেই ওয়েবপৃষ্ঠার একটি সাধারণ পরিবর্তনের সাথে ভেঙে যেতে পারে। আপনার ডেটা পাওয়ার আস্তাবল উপায়টি হ'ল ডেটা লেখকের সাথে যোগাযোগ করা এবং আপনার বোঝার বিন্যাসে ডেটা পাওয়ার জন্য একটি ব্রোকারকে একটি চুক্তি করা। কখনও কখনও এটি এমনকি অর্থ ব্যয় করে না।
জোছিম সউর

1
@ জোয়াচিমসৌয়ার - এখনও 'সেরা' পদ্ধতিতে প্রশ্নের উত্তর দেওয়া যেতে পারে।
বেনামে

যেহেতু বেশিরভাগ ওয়েবসাইটগুলি ডায়নামিক এবং ডেটাবেসগুলিতে তাদের ডেটা সংরক্ষণ করে, তাই ওয়েবসাইট থেকে ডাটাবেস পাওয়ার সর্বোত্তম উপায়। ওয়েবসাইটটির যদি একটি এপিআই থাকে তবে আপনি এটি ব্যবহার করতে পারেন। আপনি যদি স্থির পৃষ্ঠাগুলি স্ক্র্যাপ করতে চান তবে বিল্ট-ইন পাইথন urllib এবং এইচটিএমএল পার্সার মডিউলগুলি ভালভাবে কাজ করে। এইচটিএমএল স্ক্র্যাপ করার জন্য কয়েকটি প্যাকেজ পাইপাইতেও উপলব্ধ।
উবারম্যানশ

সাইট স্ক্র্যাপিং হ'ল স্কিচি ব্যবসা। এটি করার সত্যিই কোনও স্থিতিশীল উপায় নেই কারণ সাইটের মালিকরা আপনাকে চান না এবং সামগ্রিকভাবে শিল্প লোকদের এটি করতে বাধা দেওয়ার চেষ্টা করছে।
স্টিভেন এভার্স

1
হয়তো ওয়েবকিটের মতো কোনও ওয়েব ব্রাউজার এম্বেড করুন এবং তারপরে রেন্ডার করা পৃষ্ঠা থেকে তথ্য পেতে ডম স্ক্রিপ্টিং ব্যবহার করবেন? প্রায় প্রতিটি প্ল্যাটফর্মই এটি করতে পারে তবে আপনি এখানে এটি কীভাবে করতে পারবেন তা এখানে রয়েছে: doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html
user16764

উত্তর:


2

ভাল, এখানে আমার 2 সেন্ট:

যদি কোনও এজেএক্স জড়িত না থাকে, বা এটি সহজেই সাফ করা যায়, এইচটিএমএল থেকে এক্সএইচটিএমএলকে 'ঠিক করুন' (উদাহরণস্বরূপ এইচটিএমএলটিডি ব্যবহার করে), তবে তথ্যটি বের করার জন্য নিয়মিত প্রকাশের পরিবর্তে এক্সপথ ব্যবহার করুন।
একটি সুসংগঠিত ওয়েব পৃষ্ঠায়, যৌক্তিকভাবে পৃথক করা তথ্যের বিভিন্ন সত্ত্বায় <div>বা অন্য যে কোনও ট্যাগ রয়েছে যার অর্থ আপনি সহজেই একটি সাধারণ এক্সপথ এক্সপ্রেশন দিয়ে সঠিক তথ্য সন্ধান করতে সক্ষম হবেন। এটি দুর্দান্ত কারণ আপনি এটি পরীক্ষা করে বলতে পারেন, ক্রোমের কনসোল বা ফায়ারফক্সের বিকাশকারী কনসোলটি যাচাই করতে পারেন এবং যাচাই করতে পারেন অন্য কোডের এমনকি একটি লাইন লেখার আগে এটি কাজ করে।
এই পদ্ধতির মধ্যে খুব উচ্চ সংকেত-থেকে-শব্দের অনুপাতও রয়েছে, যেহেতু সাধারণত সম্পর্কিত তথ্য নির্বাচন করার জন্য অভিব্যক্তিগুলি এক-লাইনার হবে। এগুলি নিয়মিত প্রকাশের চেয়ে পড়ার পক্ষে সহজ উপায় এবং সে উদ্দেশ্যে ডিজাইন করা হয়েছে।

পৃষ্ঠাটিতে যদি এজেএক্স এবং গুরুতর জাভাস্ক্রিপ্ট-ইন জড়িত রয়েছে, তবে অ্যাপ্লিকেশনটিতে একটি ব্রাউজার উপাদান এম্বেড করুন এবং আপনার প্রয়োজনীয় ইভেন্টগুলি ট্রিগার করতে এর ডোম এবং তথ্য বের করার জন্য এক্সপথ ব্যবহার করুন। এখানে প্রচুর ভাল এম্বেডযোগ্য ব্রাউজার উপাদান রয়েছে, যার বেশিরভাগ হুডের নীচে রিয়েল-ওয়ার্ল্ড ব্রাউজার ব্যবহার করে, যা একটি ভাল জিনিস, কারণ একটি ওয়েব-পৃষ্ঠা ভুল (এক্স) এইচটিএমএল হতে পারে তবে এখনও সমস্ত বড় ব্রাউজারগুলিতে ভাল রেন্ডার করে ( আসলে, বেশিরভাগ পৃষ্ঠাগুলি অবশেষে এইভাবে পান)।


ধন্যবাদ, আমি অবশ্যই এক্সপ্যাথকে আরও কিছুটা দেখব। আমি এটির সাথে কাজ করতে অভ্যস্ত নই, সুতরাং এটি শিখতে খুব ভাল লাগবে। +1 :)
মাইক

5

আমার অভিজ্ঞতায়, নেট নেটওয়ার্ক ব্যবহার করে আপনি এইচটিএমএল অ্যাগ্রিলিটি প্যাকটি নিতে পারেন ।

পৃষ্ঠাটি যদি এক্সএইচটিএমএল হিসাবে ফর্ম্যাট হয় তবে আপনি নিয়মিত এক্সএমএল পার্সারও ব্যবহার করতে পারেন। যে কোনও পরিবেশ আপনি কল্পনা করতে পারেন তার পক্ষে অনেক কিছুই আছে।

এজেএক্স সম্পর্কিত পার্শ্ব প্রশ্নের জন্য, আপনি ডেটা পেতে এবং এটি বিশ্লেষণের জন্য নিয়মিত এইচটিটিপি নেটওয়ার্কিং কোড ব্যবহার করতে পারেন।

আবারও যদি আপনার এজেএক্স স্ট্যাকটি এক্সএমএল ফেরত দেয়, আপনি অনেক পছন্দ পেয়ে যাবেন। যদি এটি জেএসএনকে ফেরত দেয় তবে এমন একটি লাইব্রেরি বিবেচনা করুন যা আপনাকে টাইপ করা বস্তুগুলিতে স্ট্রিমটি ম্যাপ করতে দেয়। .NET এ আমি আপনাকে Newtonsoft.Json পরামর্শ দিচ্ছি ।


এবং 'এইচটিটিপি নেটওয়ার্কিং কোড' দ্বারা আপনি যখন একটি অনুরোধ করা হবে তখন সার্ভারের প্রতিক্রিয়া ক্যাপচার করবেন? পরামর্শগুলির জন্য ধন্যবাদ, আমি তাদের সন্ধান করা নিশ্চিত হবো। +1
মাইক

যথাযথভাবে। .NET- এ আপনি System.Net.WebClient বা রেস্টশার্প | এর মতো একটি লাইব্রেরি ব্যবহার করতে পারেন restsharp.org । আমি এটি ড্রোডের জন্য মনোতেও ব্যবহার করেছি।
gsscoder

4

পার্সিং এইচটিএমএল সম্পূর্ণরূপে তুচ্ছ কাজ নয়, যেহেতু একটিকে সম্ভবত ভুল চিহ্নআপ (ট্যাগ স্যুপ) নিয়ে কাজ করতে হবে। বছরের পর বছরগুলিতে, ব্রাউজারগুলি ত্রুটিগুলি মোকাবেলা করার জন্য একই কৌশলটি কমবেশি প্রয়োগ করেছে এবং এই এলগোরিদমটি HTML5 নির্দিষ্টকরণে খ্রিস্টান করা হয়েছে (হ্যাঁ, এইচটিএমএল 5 নির্দিষ্টকরণ যা HTML5 নয় এমন জিনিসগুলির সাথে কী করবে) তা নির্দিষ্ট করে।

উদাহরণস্বরূপ পার্স এইচটিএমএল, এর সমস্ত প্রধান ভাষার জন্য লাইব্রেরি হয় এই এক

যাই হোক না কেন, আপনি যা পাবেন তা কোনও অর্থে স্থিতিশীল নয়। প্রতিবার ওয়েবপৃষ্ঠার ফর্ম্যাট পরিবর্তন হওয়ার সাথে সাথে আপনাকে আপনার স্ক্র্যাপটি মানিয়ে নিতে হবে।


ধন্যবাদ, আমি কাজটি করতে সুন্দর স্যুপ ব্যবহার করছি। আমি জানি এটি স্থিতিশীল হবে না, আমার প্রশ্নগুলিতে আমার সম্ভবত এটি পরিষ্কার করা উচিত। আপনার জন্য +1 :)
মাইক

4

একটি পার্শ্ব প্রশ্ন হিসাবে: ওয়েবপেজটি আজাক্স কল দ্বারা নির্মিত হলে আপনি কীভাবে তা ব্যবহার করবেন?

যদি আজাক্স কল করা হচ্ছে, তবে সম্ভবত এটির কিছু পোষ্ট বা কিছু ভেরিয়েবলের সাথে জিইটি ইউআরএল।

শেষ পয়েন্ট এবং পরামিতিগুলি কী তা জানতে আমি জাভাস্ক্রিপ্ট পরীক্ষা করব। এর পরে সম্ভবত এটি সম্ভবত সম্ভবত ফিরে আসা ডেটা হ'ল জসন / এক্সএমএল / প্লেইন পাঠ্য বা সম্ভবত আংশিক এইচটিএমএল।

উপরের তথ্যটি জানাজানি হয়ে গেলে আপনি কেবল শেষ প্রান্তে একটি জিইটি বা পোষ্ট অনুরোধ করুন এবং ফিরে আসা ডেটা পার্স করুন।


2
ওয়ার্থ লক্ষ করেন, অনেক পরিষেবা HTTP- র হেডার নিশ্চিত করার পরিদর্শন HTTP_X_REQUESTED_WITHহয় XMLHttpRequest। উত্তম ব্যক্তিরা পোষ্ট অনুরোধগুলির জন্য এক ধরণের এক্সএসআরএফ সুরক্ষাও প্রয়োগ করবে, সুতরাং আপনার সেই ম্যাজিক কুকিও দরকার। কিছু পাবলিক এপিআই দ্বারা ইচ্ছাকৃতভাবে উদ্ঘাটিত না হওয়া এজেএক্স এন্ডপয়েন্টগুলিকে টিক্লিক করা আমার কাছে কিছুটা আইকি বোধ করে এবং যদি আউটপুট (বা অনুরোধ নীতি) পরিবর্তন হয় তবে আপনার স্ক্র্যাপার বিভাজনের মতোই প্রবণ।
টিম পোস্ট

@ টিমপোস্ট আপনি 100% সঠিক are আমি এর "আইকি" সত্যিই সম্মত করছি :) তবে কোনও পাবলিক এপিআইয়ের অভাবে প্রয়োজন অবশ্যই ..
ডার্কনাইট

আমি এটি আমার নিজের এজাক্স চালিত অ্যাপ্লিকেশনটিতে ব্যবহার করতে পারি (এবং 'নিজের দ্বারা' আমি এটি লেখার অর্থ নয় তবে সেটআপটি আমার) তবে এটি অন্য সার্ভারের সিস্টেমে চেষ্টা করে বাইপাস করা ঠিক মনে হবে না তাই আমাকে অবশ্যই @ এর সাথে একমত হতে হবে টিমপোস্ট, এটি একরকম 'আইকি' মনে হয়। এটি তবে একটি ভাল ধারণা, ধন্যবাদ! +1 টি!
মাইক

1

এটি করার কোনও স্থিতিশীল বা সর্বোত্তম উপায় নেই, এইচটিএমএল ওয়েব পৃষ্ঠাগুলি কম্পিউটার দ্বারা ম্যানিপুলেট করার জন্য তৈরি করা হয়নি। এটি মানব ব্যবহারকারীদের জন্য, তবে আপনার যদি এটি প্রয়োজন হয় তবে আমি পরামর্শ দিচ্ছি যে এটি একটি ব্রাউজার এবং কিছু জাভাস্ক্রিপ্ট ব্যবহার করবে। আমার কাজে আমি এমন একটি প্রকল্পের সাথে জড়িত ছিল যার তৃতীয় পক্ষের সাইট থেকে কিছু তথ্য নেওয়া দরকার। অ্যাপ্লিকেশনটি ক্রোম এক্সটেনশান হিসাবে বিকাশ করা হয়েছিল। অ্যাপ্লিকেশন যুক্তি জাভাস্ক্রিপ্ট ব্যবহার করে লেখা হয় যা পৃষ্ঠা লোড সম্পূর্ণ হওয়ার পরে সাইটে ইনজেকশন দেওয়া হয়। যে ডেটা বের করা হয় তা একটি HTTP সার্ভারের মাধ্যমে একটি ডাটাবেসে প্রেরণ করা হয়। এটি সেরা পদ্ধতির নয়, তবে এটি কার্যকর হয়। PS: সাইটের মালিক আমাদের এ জাতীয় কাজ করার অনুমতি দিয়েছেন।


আমি জানি যে এইচটিএমএল পৃষ্ঠাগুলি কম্পিউটার দ্বারা পার্স করার কথা ছিল না তবে কখনও কখনও কেবল অন্য কোনও বিকল্প নেই। এছাড়াও, আমি কোনও ব্যক্তিগত প্রকল্পের জন্য প্রকাশ্যে উপলভ্য তথ্য ব্যবহার করছি যা কোনওভাবেই বাণিজ্যিক নয়, আমি মনে করি না যে আমার স্পষ্ট অনুমোদনের দরকার আছে, তাই না? আপনার ইনপুট জন্য ধন্যবাদ! আপনার জন্যও +1;)
মাইক

@ মাইকহেরম্যানস আপনি কোনও ওয়েবসাইট থেকে তথ্য পাওয়ার অনুমতিপ্রাপ্ত কিনা তা জানতে, টস এবং রোবটস.টিএসটি পড়ুন। যদি উভয়ই আপনাকে স্বয়ংক্রিয়ভাবে তথ্য স্ক্র্যাপ করার অধিকার অস্বীকার না করে তবে আপনার বেশিরভাগ ক্ষেত্রে আইনত আইনত ঠিক থাকতে হবে। অবশ্যই, আইএনএল ...
কে.স্টেফ

আপনি যদি উল্লিখিত প্রকল্পের কোড দেখতে চান: কোড . google.com/p/acao-toolkit/source/browse/… । Content_script.js দেখুন, এটি কোড যা পৃষ্ঠায় ইনজেকশন দেওয়া হয়।
nohros
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.