Opcje dla HTML skrobania?

głosy
378

Myślę próbować Piękne Soup , pakiet Pythona do skrobania HTML. Czy są jakieś inne pakiety zgrzebłowe HTML Byłbym patrzysz? Python nie jest wymogiem, jestem rzeczywiście zainteresowani innych językach.

Dotychczasowe dzieje:

Utwórz 05/08/2008 o 22:09
źródło użytkownik
W innych językach...                            


40 odpowiedzi

głosy
54

Ruby świecie równoważne Piękne zupa jest why_the_lucky_stiff za Hpricot .

Odpowiedział 05/08/2008 o 22:13
źródło użytkownik

głosy
39

W świecie .NET, polecam HTML Agility Pack. Nie w pobliżu tak proste, jak niektóre z powyższych opcji (takich jak HTMLSQL), ale jest bardzo elastyczny. Pozwala maniuplate źle uformowane HTML tak, jakby to były dobrze uformowane XML, dzięki czemu można używać XPATH lub tylko itereate na węzłach.

http://www.codeplex.com/htmlagilitypack

Odpowiedział 07/08/2008 o 19:38
źródło użytkownik

głosy
32

BeautifulSoup to świetny sposób, aby przejść do HTML skrobania. Moje poprzednie zadanie miał mi robić dużo skrobanie i żałuję, że nie wiedział o BeautifulSoup kiedy zacząłem. To jak DOM z dużo więcej przydatnych opcji i jest dużo bardziej pythonic. Jeśli chcesz spróbować Ruby one przeniesione BeautifulSoup nazywając ją RubyfulSoup ale nie został zaktualizowany na jakiś czas.

Inne przydatne narzędzia są HTMLParser lub sgmllib.SGMLParser które są częścią standardowej biblioteki Pythona. Działają one poprzez wywoływanie metod każdym razem Wejście / Wyjście tag i spotkanie html tekstu. Są jak Expat jeśli jesteś zaznajomiony z tym. Biblioteki te są szczególnie przydatne, gdy idziesz do analizowania bardzo dużych plików i tworzenia drzewa DOM byłaby długa i kosztowna.

Wyrażenia regularne nie są bardzo potrzebne. BeautifulSoup obsługuje wyrażenia regularne, więc jeśli trzeba ich moc można wykorzystać go tam. Mówię iść z BeautifulSoup chyba trzeba prędkość i mniejsze zużycie pamięci. Jeśli okaże się lepszy parser HTML w Pythonie, daj mi znać.

Odpowiedział 07/08/2008 o 19:18
źródło użytkownik

głosy
18

Znalazłem HTMLSQL być śmiesznie prosty sposób na screen. To trwa dosłownie kilka minut, aby uzyskać wyniki z nim.

Zapytania są super-intuicyjne - takich jak:

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

Obecnie istnieje kilka innych alternatyw, które mają takie samo podejście.

Odpowiedział 07/08/2008 o 19:31
źródło użytkownik

głosy
16

Pytona lxml działa biblioteka jako pythonic wiążące dla bibliotek libxml2 i libxslt. Lubię szczególnie swoje wsparcie XPath i ładnego drukowania struktury XML w pamięci. Wspiera on także złamane parsowania HTML. I nie sądzę, że można znaleźć inne Python libraries / wiązania że analizowania XML szybciej niż lxml.

Odpowiedział 17/09/2008 o 13:44
źródło użytkownik

głosy
15

Dla Perl, tam WWW :: Mechanize.

Odpowiedział 06/08/2008 o 00:37
źródło użytkownik

głosy
11

Dlaczego nikt nie wspomniał JSOUP jeszcze Java? http://jsoup.org/

Odpowiedział 10/02/2012 o 20:42
źródło użytkownik

głosy
11

„Proste HTML DOM Parser” jest dobrym rozwiązaniem dla PHP, jeśli zaznajomiony z selektorów jQuery lub JavaScript wtedy znajdziesz się w domu.

Znajdź go tutaj

Istnieje również blogu o tym tutaj.

Odpowiedział 31/07/2009 o 20:39
źródło użytkownik

głosy
10

Python ma kilka opcji skrobanie HTML oprócz sród Soup. Oto kilka innych:

  • mechanizacji : podobne do perl WWW:Mechanize. Daje przeglądarkę podobnego obiektu ineract ze stron internetowych
  • lxml : Python wiązania się libwww. Obsługuje różne opcje przemierzać i wybierz elementy (np XPath i selekcji CSS)
  • scrapemark : biblioteka wysokiego poziomu za pomocą szablonów, aby wydobyć informacje z HTML.
  • pyquery : pozwala na wykonywanie zapytań jQuery jak na dokumentach XML.
  • scrapy : AN wysoki poziom skrobanie i indeksowania internetu ramy. Może być używany do pisania pająki, do eksploracji danych i do monitorowania i automatycznego testowania
Odpowiedział 28/12/2009 o 17:59
źródło użytkownik

głosy
9

TemplateMaker narzędzie od Adrian Holovaty (z Django FAME) wykorzystuje bardzo ciekawe podejście: karmić go odmiany tej samej stronie i „uczy”, gdzie „dziury” dla danych zmiennych są. To nie jest HTML specyficzny, więc byłoby to dobre dla zwykłego tekstu skrobania jakichkolwiek innych treści, jak również. Użyłem go także do PDF i HTML konwertowane do postaci zwykłego tekstu (z pdftotext i rysia, odpowiednio).

Odpowiedział 18/09/2008 o 21:13
źródło użytkownik

głosy
7

Znam i kocham Screen-Scraper .

Screen-Skrobak jest narzędziem do pobierania danych ze stron internetowych. Screen-Skrobak automatyzuje:

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

Typowe zastosowania:

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

Techniczny:

* 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

Trzy edycje screen-skrobak:

* 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.
Odpowiedział 16/08/2009 o 21:56
źródło użytkownik

głosy
7

Chciałbym najpierw sprawdzić, czy strona (y) w kwestii zapewnienia serwer API lub RSS dla dostępu do danych, które wymagają.

Odpowiedział 05/08/2008 o 22:11
źródło użytkownik


głosy
5

Miałem pewne sukcesy z przeglądarki HtmlUnit dostępnymi w Javie. Jest to prosty framework do pisania testów jednostkowych na Web UI, ale równie przydatne dla HTML skrobania.

Odpowiedział 31/08/2008 o 13:09
źródło użytkownik

głosy
5

Inną opcją byłoby Perl Web :: Skrobak która opiera się na Ruby Scrapi . W skrócie, z miłą i zwięzłej składni, można uzyskać solidną skrobaczki bezpośrednio do struktur danych.

Odpowiedział 26/08/2008 o 23:46
źródło użytkownik

głosy
5

Skrobanie przepełnienie stosu jest szczególnie łatwe z butami i Hpricot .

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
Odpowiedział 22/08/2008 o 11:20
źródło użytkownik

głosy
4

Jest to rozwiązanie zbyt: Netty HttpClient

Odpowiedział 11/05/2011 o 19:28
źródło użytkownik

głosy
4

Kolejnym narzędziem NET jest MhtBuilder

Odpowiedział 13/02/2009 o 13:58
źródło użytkownik

głosy
4

Mimo że został zaprojektowany dla .NET web-testów, byłem przy użyciu Watin ramy dla tego celu. Ponieważ jest DOM oparte jest to dość łatwe do uchwycenia HTML, tekst lub obrazy. Recentely, użyłem go zrzucić listę linków z pomocą MediaWiki wszystkich stronach zapytania przestrzeni nazw do arkusza kalkulacyjnego Excel. Poniższy VB.NET kod fragement jest dość surowy, ale to działa.


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
Odpowiedział 27/08/2008 o 10:43
źródło użytkownik

głosy
4

Użyłem piękny zupa wiele z Pythona. Jest o wiele lepiej niż regularne sprawdzanie ekspresji, ponieważ działa jak przy użyciu DOM , nawet jeśli HTML jest źle sformatowana. Można szybko znaleźć tagi HTML i tekst z prostszej niż składni wyrażeń regularnych. Po znalezieniu elementu, można iteracyjne nad nim i jego dzieci, co jest bardziej przydatne dla zrozumienia treści w kodzie niż to jest z wyrażeń regularnych. Życzę Piękne Soup istniał lat temu, kiedy miałem zrobić dużo screen scraping - byłoby to zaoszczędziło mi dużo czasu i ból głowy, ponieważ struktura HTML była tak słaba, zanim ludzie zaczęli go walidacji.

Odpowiedział 22/08/2008 o 14:58
źródło użytkownik

głosy
4

Używam Hpricot na Ruby. Jako przykład jest to fragment kodu, który mogę używać, aby pobrać wszystkie tytuły książek z sześciu stron mojego konta HireThings (jak oni nie wydają się stanowić pojedynczą stronę z tej informacji):

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 

To całkiem dużo kompletne. Wszystko, co jest przed tym są import biblioteki i ustawienia dla mojego pełnomocnika.

Odpowiedział 06/08/2008 o 06:57
źródło użytkownik

głosy
3

Cóż, jeśli chcesz to zrobić od strony klienta przy użyciu jedynie przeglądarki masz jcrawl.com . Po zaprojektowaniu usługę złomowania z aplikacji internetowej ( http://www.jcrawl.com/app.html ), trzeba tylko dodać wygenerowanego skryptu do strony HTML, aby rozpocząć korzystanie / prezentacji danych.

Cała logika złomowanie dzieje na przeglądarki przy pomocy Javascript. Mam nadzieję, że okaże się przydatny. Kliknij ten link do żywego przykładu, który wydobywa najnowsze wiadomości z tenisa Yahoo .

Odpowiedział 29/10/2012 o 16:59
źródło użytkownik

głosy
3

Implementacje algorytm parsowania HTML5 : html5lib (Python, Ruby), Validator.nu HTML Parser (Java, JavaScript, C ++ w rozwoju), Hubbub (C), Twintsam (C #; nadchodzących).

Odpowiedział 09/10/2008 o 21:53
źródło użytkownik

głosy
3

Byłbyś głupcem, aby nie używać Perl .. Tu się płomienie ..

Kość się na następujących modułów i Ginsu dowolny zeskrobać dookoła.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Odpowiedział 17/09/2008 o 13:56
źródło użytkownik

głosy
3

W języku Java, można użyć TagSoup .

Odpowiedział 24/08/2008 o 11:32
źródło użytkownik

głosy
3

Użyłem LWP i HTML :: TreeBuilder z Perl i stwierdzili, że są bardzo użyteczne.

LWP (skrót libwww-Perl) pozwala podłączyć do stron internetowych i zeskrobać HTML, można dostać moduł tutaj i książka O'Reilly wydaje się być online tutaj .

TreeBuilder pozwala skonstruować drzewo z HTML i dokumentacja i źródła są dostępne w HTML :: TreeBuilder - Parser, który buduje drzewo składni HTML .

Nie może być zbyt ciężki podnoszenia nadal do czynienia z czymś w rodzaju takiego podejścia chociaż. Nie spojrzał na module Mechanize sugerowanej przez inną odpowiedź, więc może dobrze zrobić.

Odpowiedział 17/08/2008 o 15:13
źródło użytkownik

głosy
2

Lubię funkcji Arkusze Google ImportXML (URL, XPath).

Będzie to powtórzyć komórki w dół kolumny, jeśli wyrażenie XPath zwraca więcej niż jedną wartość.

Można mieć maksymalnie 50 importxml()funkcji na jednym arkuszu.

Web Plugin RapidMiner jest również bardzo łatwy w użyciu. Można to zrobić posty, akceptuje ciasteczek i można ustawić user-agent .

Odpowiedział 22/07/2010 o 05:31
źródło użytkownik

głosy
2

Miałem również wielki sukces przy użyciu Aptana za Jaxer + jQuery do analizowania stron. To nie jest tak szybki lub „script-like” w naturze, ale selektorów jQuery + prawdziwy JavaScript / DOM jest ratownik na bardziej skomplikowanych (lub zniekształconych) stron.

Odpowiedział 19/11/2008 o 20:11
źródło użytkownik

głosy
2

Miałem mieszane rezultaty w .NET przy użyciu SgmlReader który został pierwotnie założone przez Chris Lovett i wydaje się, że zostały zaktualizowane przez MindTouch .

Odpowiedział 27/08/2008 o 19:49
źródło użytkownik

głosy
2

Prawdopodobnie masz już tak dużo, ale myślę, że to, co chce zrobić:

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")
Odpowiedział 05/08/2008 o 23:58
źródło użytkownik

głosy
1

Robię dużo Advanced Web skrobania tak chciał mieć całkowitą kontrolę nad moim stosie i zrozumieć ograniczenia. Ta biblioteka webscraping jest wynik.

Odpowiedział 12/04/2011 o 01:20
źródło użytkownik

głosy
1

Używam Feedity - http://feedity.com za niektóre prace zgarniania (i przekształcenie RSS) w mojej bibliotece. Działa to dobrze dla większości stron internetowych.

Odpowiedział 01/12/2010 o 06:28
źródło użytkownik

głosy
1

Niedawna rozmowa przez Dav Szkło Welcome to the Jungle! (YUIConf 2011 Keynote otwarcia) pokazuje, jak można wykorzystać YUI 3 na node.js zrobić programowanie stronie klienta, jak (z Domem selektorów zamiast przetwarzania string) na serwerze. Jest to bardzo imponujące.

Odpowiedział 22/11/2010 o 18:04
źródło użytkownik

głosy
1

W przypadku bardziej złożonych aplikacji zgarniania, polecam internetowej skrobaczki IRobotSoft. Jest dedykowany wolne oprogramowanie dla skrobanie ekranu. Ma silny język zapytań dla stron HTML i zapewnia bardzo prosty interfejs nagrywania internetową, która będzie cię uwolnić od wielu wysiłku programowania.

Odpowiedział 17/05/2010 o 16:58
źródło użytkownik

głosy
1

Scrubyt używa Ruby i Hpricot zrobić ładne i łatwe internetowej skrobania. Napisałem skrobak do usług bibliotecznych mojej uczelni za pomocą tego w około 30 minut.

Odpowiedział 25/08/2008 o 13:02
źródło użytkownik

głosy
1

Wyrażenia regularne działa całkiem dobrze dla HTML skrobania jak dobrze ;-) Choć po patrząc na piękny Soup, widzę dlaczego miałoby to być cennym narzędziem.

Odpowiedział 05/08/2008 o 22:29
źródło użytkownik

głosy
0

Jeśli chodzi o wydobywanie danych z dokumentu HTML na stronie serwera, node.js jest fantastycznym rozwiązaniem. Używałem go z powodzeniem z dwóch modułów zwanych prośbę i cheerio .

Można zobaczyć przykład jak to działa tutaj .

Odpowiedział 10/05/2013 o 19:28
źródło użytkownik

głosy
0

Zrobiłem bardzo ładne bibliotecznych narzędzia internetowe dla sieci web skrobanie.

Chodzi o to, aby dopasować szablon przeciwko stronie, która będzie wyodrębnić wszystkie dane na stronie, a także potwierdzić, czy struktura strony nie ulega zmianie.

Więc może po prostu wziąć kod HTML na stronę internetową, którą chcesz przetwarzać, usunąć wszystkie dynamiczne lub nieistotnych treści i opisywanie interesujących części.

Np Kopiuj do nowego pytanie na stronie indeksu stackoverflow.com jest:

<div id="question-summary-11326954" class="question-summary narrow">

    <!-- skipped, this is getting too long -->

    <div class="summary">

        <h3><a title="Some times my tree list have vertical scroll ,then I scrolled very fast and the tree list shivered .Have any solution for this.
" class="question-hyperlink" href="/questions/11326954/about-scroll-bar-issue-in-tree">About Scroll bar issue in Tree</a></h3>

    <!-- skipped -->

    </div>
</div>

Tak po prostu usunąć ten pewną id, tytuł i streszczenie, aby utworzyć szablon, który odczyta wszystkie nowe pytania w tytule, streszczenia, łącza tablic:

 <t:loop>
   <div class="question-summary narrow">
     <div class="summary">
       <h3>
          <a class="question-hyperlink">
            {title:=text(), summary:=@title, link:=@href}
          </a>
       </h3>
     </div>
   </div>
 </t:loop>

I oczywiście także obsługuje podstawowe techniki, CSS 3 selektorów XPath i XQuery 1 2 wyrażenia.

Jedynym problemem jest to, że jestem tak głupi, aby to Free Pascal biblioteki. Ale jest też język niezależny internetowej demo .

Odpowiedział 04/07/2012 o 11:43
źródło użytkownik

głosy
0

Dla tych, którzy wolą graficznego narzędzia workflow, RapidMiner (FOSS) ma ładny indeksowania internetu i skrobania siłownia.

Oto seria filmów:

http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html

Odpowiedział 04/04/2011 o 23:44
źródło użytkownik

głosy
-1

SharpQuery

Jest to w zasadzie jQuery dla C #. To zależy HTML Agility Paczka dla parsowania HTML.

Odpowiedział 01/12/2010 o 06:41
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more