Opcje skrobania HTML? [zamknięte]

Myślę o wypróbowaniu Beautiful Soup , pakietu Pythona do skrobania HTML. Czy są jakieś inne pakiety do skrobania HTML, na które powinienem patrzeć? Python nie jest wymogiem, jestem właściwie zainteresowany słuchaniem o innych językach, jak również.

Historia do tej pory:

Author: carla, 2008-08-06

30 answers

Odpowiednikiem Ruby world jest Why_the_lucky_stiff ' s Hpricot .

 54
Author: Joey deVilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 09:56:45

W świecie. NET polecam HTML Agility Pack. Nie tak proste jak niektóre z powyższych opcji (jak HTMLSQL), ale jest bardzo elastyczne. Pozwala na maniuplate źle uformowanego HTML tak, jakby był dobrze uformowany XML, dzięki czemu można używać XPATH lub po prostu itereate nad węzłami.

Http://www.codeplex.com/htmlagilitypack

 39
Author: Jon Galloway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-07 18:38:30

BeautifulSoup to świetny sposób na skrobanie HTML. Moja poprzednia praca sprawiła, że dużo skrobałam i chciałabym wiedzieć o BeautifulSoup, kiedy zaczynałam. To jest jak DOM z dużo więcej przydatnych opcji i jest o wiele bardziej pythonic. Jeśli chcesz wypróbować Ruby, przenieśli BeautifulSoup nazywając go RubyfulSoup, ale nie został zaktualizowany przez jakiś czas.

Inne przydatne narzędzia to HTMLParser lub sgmllib.SGMLParser, które są częścią standardowej biblioteki Pythona. Działają one poprzez wywołanie metod za każdym razem, gdy wprowadzasz / opuszczasz znacznik i napotykasz tekst html. Są jak emigranci, jeśli się z tym znasz. Biblioteki te są szczególnie przydatne, jeśli zamierzasz analizować bardzo duże pliki, a tworzenie drzewa DOM byłoby długie i kosztowne.

Wyrażenia regularne nie są zbyt potrzebne. BeautifulSoup obsługuje wyrażenia regularne, więc jeśli potrzebujesz ich mocy, możesz je tam wykorzystać. Proponuję wybrać BeautifulSoup, chyba że potrzebujesz szybkości i mniejszej pamięci. Jeśli znajdziesz lepszy HTML parser w Pythonie, daj mi znać.

 32
Author: Cristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-07 18:18:59

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

Zapytania są bardzo intuicyjne-jak:

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

Istnieją teraz inne alternatywy, które przyjmują to samo podejście.

 18
Author: deadprogrammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-07 18:31:17

Biblioteka Pythona lxml działa jako oprawa Pythoniczna dla bibliotek libxml2 i libxslt. Szczególnie podoba mi się obsługa XPath i ładne drukowanie struktury XML w pamięci. Obsługuje również parsowanie zepsutego HTML. I nie sądzę, że można znaleźć inne biblioteki/wiązania Pythona, które przetwarzają XML szybciej niż lxml.

 16
Author: akaihola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 12:38:48

Dla Perla jest WWW:: Mechanize.

 15
Author: andrewrk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 23:37:44

'Simple HTML DOM Parser' jest dobrym rozwiązaniem dla PHP, jeśli znasz selektory jQuery lub JavaScript to znajdziesz się w domu.

Znajdź go tutaj

Jest również wpis na blogu o tym tutaj.

 11
Author: Orange Box,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 19:39:57

Dlaczego nikt jeszcze nie wspomniał o JSOUP dla Javy? http://jsoup.org/

 11
Author: cookie_monster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-10 19:42:50

Python ma kilka opcji skrobania HTML oprócz pięknej zupy. Oto kilka innych:

  • mechanizm : podobny do Perla WWW:Mechanize. Daje przeglądarkę jak obiekt do inercji ze stronami www
  • lxml : Wiązanie Pythona do libwww. Obsługuje różne opcje przechodzenia i zaznaczania elementów (np. XPath i wybór CSS)
  • scrapemark : biblioteka wysokiego poziomu wykorzystująca szablony do wyodrębniania informacji z HTML.
  • pyquery : pozwala na tworzenie zapytań jQuery w dokumentach XML.
  • [24]}scrapy: framework do scrapowania na wysokim poziomie i indeksowania stron internetowych. Może być używany do pisania pająków, eksploracji danych oraz monitorowania i automatycznego testowania
 10
Author: filippo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-24 15:26:54

Templatemaker Narzędzie od Adriana Holovaty (z Django fame) wykorzystuje bardzo ciekawe podejście: karmisz go wariacjami tej samej strony i "uczy się", gdzie są "dziury" dla zmiennych danych. Nie jest specyficzny dla HTML, więc byłoby dobre do skrobania innych treści tekstowych, jak również. Używałem go również do plików PDF i HTML przekonwertowanych na zwykły tekst (odpowiednio z pdftotext i lynx).

 9
Author: akaihola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 20:13:40

Chciałbym najpierw dowiedzieć się, czy witryna(s) W pytaniu zapewnić serwer API lub kanały RSS dla dostępu do danych, których potrzebujesz.

 7
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 21:11:29

Wiem i kocham Screen-Scraper .

Screen-Scraper to narzędzie do wyodrębniania danych ze stron internetowych. Screen-Scraper 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

Techniczne:

* 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-scrapera:

* 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.
 7
Author: raiglstorfer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:10:05

Inną opcją dla Perla będzie Web::Scraper, który jest oparty na scrapie Rubiego . W skrócie, dzięki ładnej i zwięzłej składni, możesz uzyskać solidny skrobak bezpośrednio do struktur danych.

 6
Author: Jeff Atwood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:05:58

Skrobanie przepełnienie stosu jest szczególnie łatwe z Buty 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
 5
Author: Frank Krueger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 10:20:38

Odniosłem sukces z HtmlUnit , w Javie. Jest to prosty framework do pisania testów jednostkowych w interfejsie webowym, ale równie przydatny do skrobania HTML.

 5
Author: Henry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 12:09:33
 5
Author: mvark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 12:15:28

Kolejnym narzędziem dla. NET jest MhtBuilder

 4
Author: GeekyMonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-13 12:58:01

Jest też takie rozwiązanie: netty HttpClient

 4
Author: jbst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-02 18:40:07

Używam Hpricot na Ruby. Jako przykład jest to fragment kodu, którego używam do pobierania wszystkich tytułów książek z sześciu stron mojego konta najemców (ponieważ nie wydają się dostarczać jednej strony z tymi informacjami): {]}

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 
Jest prawie kompletna. Wszystko, co przychodzi przed tym są import biblioteki i ustawienia dla mojego serwera proxy.
 4
Author: Wolfbyte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:15:19

Ja często używałam pięknej zupy z Pythonem. Jest to o wiele lepsze niż sprawdzanie wyrażeń regularnych, ponieważ działa jak użycie DOM , nawet jeśli HTML jest źle sformatowany. Możesz szybko znaleźć tagi HTML i tekst z prostszą składnią niż wyrażenia regularne. Gdy znajdziesz element, możesz go iterować i jego potomków, co jest bardziej przydatne do zrozumienia zawartości w kodzie niż w przypadku wyrażeń regularnych. Chciałabym, żeby piękna zupa istniała lata temu, kiedy musiałam zrobić dużo screenscrapingu-zaoszczędziłoby mi to dużo czasu i bólu głowy, ponieważ struktura HTML była tak słaba, zanim ludzie zaczęli ją sprawdzać.

 4
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:24:20

Chociaż został zaprojektowany dla . NET web-testing, używałem do tego celu frameworka WatiN. Ponieważ jest oparty na DOM, jest dość łatwy do przechwytywania HTML, tekst lub obrazy. Ostatnio użyłem go do zrzucenia listy linków z MediaWiki wszystkich zapytań przestrzeni nazw stron do arkusza kalkulacyjnego Excel. Następujące VB.NET fragment kodu jest dość prymitywny, ale 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
 4
Author: JonnyGold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:25:54

Implementacje algorytmu parsowania HTML5: html5lib (Python, Ruby), Validator.nu parser HTML (Java, JavaScript; C++ w rozwoju), (C), Twintsam (C#;).

 3
Author: hsivonen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 20:53:21

Byłabyś głupcem nie używając Perla.. Nadchodzą płomienie..

Kości NA następujących modułach i ginsu wszelkie zadrapania wokół.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
 3
Author: 2 revs, 2 users 67%crojac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-27 16:03:56

Użyłem LWP I HTML::TreeBuilder z Perlem i uznałem je za bardzo użyteczne.

LWP (skrót od libwww-perl) pozwala łączyć się ze stronami internetowymi i zeskrobywać HTML, możesz pobrać moduł tutaj a książka O ' Reilly wydaje się być online tutaj .

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

Nie może być zbyt wiele ciężkich podnoszenia nadal do czynienia z czymś takim podejście choć. Nie spojrzałem na moduł mechanizacji zasugerowany przez inną odpowiedź, więc mogę to zrobić.

 3
Author: kaybenleroll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:22:42

W Javie można używać tagów .

 3
Author: Peter Hilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 10:18:26

Cóż, jeśli chcesz to zrobić od strony Klienta, używając tylko przeglądarki, którą masz jcrawl.com . po zaprojektowaniu usługi złomowania z aplikacji webowej ( http://www.jcrawl.com/app.html ), wystarczy dodać wygenerowany skrypt do strony HTML, aby zacząć używać / prezentować swoje dane.

Cała logika złomowania dzieje się w przeglądarce za pomocą JavaScript. Mam nadzieję, że się przyda. Kliknij ten link, aby uzyskać przykład na żywo, który wydobywa najnowsze wiadomości z Yahoo tennis .

 3
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 17:07:45

Prawdopodobnie masz już tyle, ale myślę, że to właśnie próbujesz 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")
 2
Author: Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 22:58:06

Miałem mieszane wyniki w.NET przy użyciu SgmlReader, który został pierwotnie uruchomiony przez Chris Lovett i wydaje się być zaktualizowany przez MindTouch.

 2
Author: Shawn Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 18:49:53

Lubię funkcję ImportXML(URL, XPath) w arkuszach kalkulacyjnych Google.

Powtórzy komórki w kolumnie, jeśli wyrażenie XPath zwróci więcej niż jedną wartość.

Możesz mieć do 50 importxml() funkcji w jednym arkuszu kalkulacyjnym.

Wtyczka internetowa RapidMiner jest również dość łatwa w użyciu. Może robić posty, akceptuje pliki cookie i może ustawić user-agent .

 2
Author: Neil McGuigan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-27 16:16:50

Odniosłem również wielki sukces używając Jaxer + jQuery Aptany do analizy stron. Nie jest tak szybki lub "skryptopodobny" z natury, ale selektory jQuery + real JavaScript / DOM ratują życie na bardziej skomplikowanych (lub zniekształconych) stronach.

 2
Author: kkubasik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 18:27:48