এইচটিএমএল স্ক্র্যাপিংয়ের জন্য বিকল্পগুলি? [বন্ধ]


406

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

গল্প এই পর্যন্তই:



ট্যাগ স্যুপ লিঙ্কটি মারা গেছে।
Tapper7

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

স্টক জাভা এক্সপাথ এক্সপ্রেশন সহ এইচটিএমএল হাঁটতে পারে, যদিও সমস্যা ছাড়াই। পার্সার পার্ট (ডকুমেন্টবিল্ডার) ভুল এইচটিএমএলকে চোক করে, এবং 100% সঠিক HTML এটি ওয়েবে বেশ বিরল quite অতএব আমি পার্সারটিকে জেটিডি-র সাথে প্রতিস্থাপন করতে চাই । এক্সপথের ক্ষেত্রে, জাভার নিজস্ব XPathExpressionব্যবহার করা যেতে পারে (যা জাভা 1.5 থেকে বিদ্যমান)
মার্ক জেরোনিমাস

উত্তর:



44

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

http://www.codeplex.com/htmlagilitypack


2
এর সাথে লিনকটি একত্রিত করুন এবং এটি আরও এইচটিএমএলএসকিউলের মতো মনে হচ্ছে, না?
ইয়াহু আশীর্বাদ

3
এর সাথে শার্পকিউয়ারি একত্রিত করুন এবং এটি ঠিক jQuery এর মতো হয়ে যায়! code.google.com/p/sharp-query
এমপেন 1'10

1
এইচটিএমএল অ্যাগ্রিলিটি প্যাকটি চেষ্টা করেছি এমন বেশ কয়েকটি এইচটিএমএল ডকুমেন্টের জন্য ডমকে সঠিকভাবে গঠন করতে ব্যর্থ।
অ্যাশ বার্লিন-টেলর

37

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

অন্যান্য দরকারী সরঞ্জামগুলি হ'ল এইচটিএমএল পার্সার বা স্যাগমিলিব.এসজিএমএল পার্সার যা স্ট্যান্ডার্ড পাইথন লাইব্রেরির অংশ। আপনি যখন কোনও ট্যাগ প্রবেশ / প্রস্থান করেন এবং এইচটিএমএল পাঠ্যের মুখোমুখি হন তখন এই পদ্ধতিগুলি কল করে কাজ করে। আপনি যদি এর সাথে পরিচিত হন তবে এগুলি এক্সপেটের মতো। এই লাইব্রেরিগুলি বিশেষত কার্যকর যদি আপনি খুব বড় ফাইলগুলি বিশ্লেষণ করতে যাচ্ছেন এবং একটি ডিওএম ট্রি তৈরি করা দীর্ঘ এবং ব্যয়বহুল হবে।

নিয়মিত প্রকাশগুলি খুব প্রয়োজন হয় না। বিউটিউসসপ নিয়মিত এক্সপ্রেশন পরিচালনা করে তাই আপনার যদি তাদের শক্তি প্রয়োজন হয় তবে আপনি সেটিকে এটি ব্যবহার করতে পারেন। আমি বলছি আপনার গতি এবং আরও ছোট মেমরির পদচিহ্নের প্রয়োজন না হলে সুন্দরী সপ সঙ্গে যান। যদি আপনি পাইথনে আরও ভাল এইচটিএমএল পার্সার খুঁজে পান তবে আমাকে জানান।


21

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

প্রশ্নগুলি অতি-স্বজ্ঞাত - যেমন:

SELECT title from img WHERE $class == 'userpic'

একই পদ্ধতি গ্রহণ করে এখন আরও কিছু বিকল্প রয়েছে।


7
এফওয়াইআই, এটি একটি পিএইচপি গ্রন্থাগার
ত্রিস্তান হ্যাভেলিক

19

পাইথন lxML লাইব্রেরি libxML2 এবং libxslt লাইব্রেরির জন্য পাইথোনিক বাইন্ডিং হিসাবে কাজ করে। আমি বিশেষত এর এক্সপথ সমর্থন এবং ইন-মেমরি এক্সএমএল কাঠামোর সুন্দর-মুদ্রণ পছন্দ করি। এটি ভাঙা এইচটিএমএলকে পার্সিংও সমর্থন করে। এবং আমি মনে করি না যে আপনি অন্যান্য পাইথন লাইব্রেরি / বাইন্ডিংগুলি XXML এর চেয়ে দ্রুত এক্সএমএলকে বিশ্লেষণ করতে পারেন।


18

পার্লের জন্য, ডাব্লুডাব্লুডাব্লু :: মেকানাইজ রয়েছে।


16

পাইথনের কাছে বিটিফুল স্যুপ ছাড়াও এইচটিএমএল স্ক্র্যাপিংয়ের বিভিন্ন বিকল্প রয়েছে। এখানে আরও কয়েকজন রয়েছেন:

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

1
পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে একটি অন্তর্নির্মিত এইচটিএমএল পার্সার রয়েছে ... কেন কেবল এটি ব্যবহার করবেন না? docs.python.org/2.7/library/htmlparser.html
আর্টঅফ ওয়ারফেয়ার

14

'সিম্পল এইচটিএমএল ডোম পার্সার' পিএইচপি-র জন্য একটি ভাল বিকল্প, যদি আপনি jQuery বা জাভাস্ক্রিপ্ট নির্বাচকদের সাথে পরিচিত হন তবে আপনি ঘরে বসে নিজেকে খুঁজে পাবেন।

এটি এখানে সন্ধান করুন

এটি সম্পর্কে একটি ব্লগ পোস্ট এখানে আছে।


1
আমি এই দ্বিতীয়। এটিকে কাজ করতে কেবল ওয়েব সার্ভারে কোনও Mod_python, ইত্যাদি ইনস্টল করার দরকার নেই
ব্রুক উলফ


11

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


আপনি কীভাবে বড় এইচটিএমএল পৃষ্ঠাগুলির জন্য টেমপ্লেটকারকে কাজ করবেন? আমি যখন এটি অপ্রয়োজনীয় কিছু দিই তখন এটি ক্র্যাশ হয়ে গেছে।
হুজু

আমি মনে করি আমার বড় কোনও HTML পৃষ্ঠা নেই HTML কোনও সমস্যাযুক্ত সমস্যা নেই বলে মনে হয় কোড. google.com/p/templatemaker/issues/list এ সমস্যার জন্য তাই সেখানে পরীক্ষার কেস প্রেরণ করা সম্ভবত উপযুক্ত appropriate দেখে মনে হচ্ছে না যদিও অ্যাড্রিয়ান লাইব্রেরিটি রক্ষণাবেক্ষণ করছেন। আমি অবাক হই যে তিনি আজকাল অ্যালব্লক-এ কী ব্যবহার করেন কারণ তারা অবশ্যই প্রচুর স্ক্র্যাপিং করে।
আকাইহোলা

10

আমি জানি এবং স্ক্রিন-স্ক্র্যাপ পছন্দ করি

স্ক্রিন-স্ক্র্যাপার হ'ল ওয়েবসাইটগুলি থেকে ডেটা আহরণের একটি সরঞ্জাম। স্ক্রিন-স্ক্র্যাপ স্বয়ংক্রিয়ভাবে:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

সাধারণ ব্যবহার:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

কারিগরী:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

স্ক্রিন স্ক্র্যাপার তিনটি সংস্করণ:

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.

দুর্ভাগ্যক্রমে এমনকি বেসিক সংস্করণটিও এফওএসএস নয়। এটি কেবল বিয়ারের মতো মুক্ত বলে মনে হচ্ছে।
Andreas Kuckartz

9

আমি প্রথমে খুঁজে বের করব যে প্রশ্নে থাকা সাইটগুলি গুলি আপনার প্রয়োজনীয় ডেটা অ্যাক্সেসের জন্য কোনও API সার্ভার বা আরএসএস ফিড সরবরাহ করে কিনা।


8

জুতা এবং এইপ্রিকোটের সাহায্যে স্ক্র্যাপিং স্ট্যাক ওভারফ্লো বিশেষভাবে সহজ ।

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end

8

পার্লের জন্য অন্য বিকল্পটি হবে ওয়েব :: স্ক্র্যাপ যা রুবির স্ক্রাপির উপর ভিত্তি করে । সংক্ষেপে, সুন্দর এবং সংক্ষিপ্ত বাক্য গঠন সহ, আপনি সরাসরি ডেটা স্ট্রাকচারে একটি শক্তিশালী স্ক্র্যাপ পেতে পারেন।


7

আমি জাভাতে এইচটিএমএলউনিতের সাথে কিছুটা সাফল্য পেয়েছি । এটি ওয়েব ইউআই-তে ইউনিট পরীক্ষা লেখার জন্য একটি সাধারণ কাঠামো, তবে এইচটিএমএল স্ক্র্যাপিংয়ের জন্য সমানভাবে কার্যকর।


আপনার যদি কখনও প্রয়োজন হয় তবে আপনি জাভাস্ক্রিপ্ট সম্পাদন মূল্যায়নের জন্য এটি ব্যবহার করতে পারেন :)
ডেভিড




5

আমি রুবিতে এইপ্রিকোট ব্যবহার করি। উদাহরণ হিসাবে এটি কোডের একটি স্নিপেট যা আমি আমার হায়ারটিংস অ্যাকাউন্টের ছয় পৃষ্ঠা থেকে সমস্ত বইয়ের শিরোনাম পুনরুদ্ধার করতে ব্যবহার করি (কারণ তারা এই তথ্য সহ একটি পৃষ্ঠা সরবরাহ করে না বলে মনে হয়):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

এটি বেশ সম্পূর্ণ। এর আগে যা আসে তা হ'ল লাইব্রেরি আমদানি এবং আমার প্রক্সিটির সেটিংস।


5

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


5

যদিও এটি নেট নেট -টেস্টিংয়ের জন্য ডিজাইন করা হয়েছিল , আমি এই লক্ষ্যে ওয়াটিএন কাঠামোটি ব্যবহার করছি । এটি ডোম-ভিত্তিক হওয়ায় এইচটিএমএল, পাঠ্য বা চিত্র ক্যাপচার করা সহজ। স্বতঃস্ফূর্তভাবে, আমি এটি মিডিয়াউইকির সমস্ত পৃষ্ঠার নেমস্পেস কোয়েরি থেকে একটি এক্সেল স্প্রেডশীটে লিঙ্কের একটি তালিকা ডাম্প করতে ব্যবহার করেছি । নিম্নলিখিত VB.NET কোড fragement বেশ অপরিশোধিত, কিন্তু এটি কার্যকর।


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub


3

পার্ল ব্যবহার না করা আপনি বোকা হয়ে থাকবেন .. এখানে শিখার আগুন ..

নিম্নলিখিত মডিউলগুলি নিয়ে এসেছেন এবং চারপাশে কোনও স্ক্র্যাপ জিনসু করুন।

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper

3

আমি এলডাব্লুপি এবং এইচটিএমএল :: ট্রিবিল্ডার ব্যবহার করেছি পার্লের সাথে সেগুলি খুব দরকারী বলে খুঁজে পেয়েছি।

LWP (libwww-perl এর জন্য সংক্ষিপ্ত) আপনাকে ওয়েবসাইটগুলিতে সংযোগ করতে এবং এইচটিএমএল স্ক্র্যাপ করতে দেয়, আপনি এখানে মডিউলটি পেতে পারেন এবং ও'রিলি বইটি এখানে অনলাইনে বলে মনে হচ্ছে

ট্রিবিল্ডার আপনাকে এইচটিএমএল থেকে একটি গাছ তৈরি করতে দেয় এবং ডকুমেন্টেশন এবং উত্স এইচটিএমএল পাওয়া যায়: ট্রি ট্রিউডার - পার্সার যা এইচটিএমএল সিনট্যাক্স ট্রি তৈরি করে

যদিও এই পদ্ধতির মতো কিছু করতে এখনও খুব বেশি ভারী-উত্তোলন হতে পারে। আমি অন্য উত্তরের প্রস্তাবিত মেকানিকাইজ মডিউলটির দিকে নজর দিইনি , তাই আমি এটি ভালভাবে করতে পারি।



3

ঠিক আছে, আপনি যদি কেবল ব্রাউজার ব্যবহার করে ক্লায়েন্টের পক্ষ থেকে এটি করতে চান তবে আপনার কাছে jcrawl.com আছে । ওয়েব অ্যাপ্লিকেশন ( http://www.jcrawl.com/app.html) থেকে আপনার স্ক্র্যাপিং পরিষেবাটি নকশা করার পরে ) , আপনার ডেটা ব্যবহার / উপস্থাপন শুরু করার জন্য আপনাকে কেবল উত্পন্ন স্ক্রিপ্টটি কোনও HTML পৃষ্ঠায় যুক্ত করতে হবে।

সমস্ত স্ক্র্যাপিং যুক্তি ব্রাউজারে জাভাস্ক্রিপ্টের মাধ্যমে ঘটে। আশা করি এটি আপনার কাজে লাগবে। ইয়াহু টেনিস থেকে সর্বশেষ সংবাদ বের করে এমন সরাসরি উদাহরণের জন্য এই লিঙ্কটিতে ক্লিক করুন ।


2

আপনার কাছে সম্ভবত ইতিমধ্যে কিছু রয়েছে তবে আমি মনে করি এটিই আপনি যা করার চেষ্টা করছেন:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")


2

আমি গুগল স্প্রেডশিটগুলির ইমপোর্টএক্সএমএল (ইউআরএল, এক্সপথ) ফাংশন পছন্দ করি।

যদি আপনার এক্সপথ এক্সপ্রেশন একাধিক মান ফেরত দেয় তবে এটি কলামের নীচে কক্ষগুলি পুনরাবৃত্তি করবে।

importxml()একটি স্প্রেডশিটে আপনার 50 টি পর্যন্ত ফাংশন থাকতে পারে ।

র‌্যাপিডমিনারের ওয়েব প্লাগইন ব্যবহার করাও বেশ সহজ। এটি পোস্ট করতে পারে, কুকিজ গ্রহণ করে এবং ব্যবহারকারী-এজেন্ট সেট করতে পারে ।


2

পৃষ্ঠাগুলি বিশ্লেষণ করতে অপ্টানার জ্যাক্সার + জিকুয়েরি ব্যবহার করে আমি দুর্দান্ত সাফল্য পেয়েছি। এটি প্রকৃতির হিসাবে তত দ্রুত বা 'স্ক্রিপ্টের মতো' নয়, তবে jQuery নির্বাচক + আসল জাভাস্ক্রিপ্ট / ডিওএম আরও জটিল (বা ত্রুটিযুক্ত) পৃষ্ঠাগুলির একটি জীবনরক্ষক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.