Alternativer for HTML skraping?

stemmer
381

Jeg tenker på å prøve Vakker suppe , en Python pakke for HTML skraping. Er det noen andre HTML skraping pakker jeg bør se på? Python er ikke et krav, jeg er faktisk interessert i å høre om andre språk også.

Historien så langt:

Publisert på 05/08/2008 klokken 21:09
kilden bruker
På andre språk...                            


40 svar

stemmer
54

The Ruby Verdens tilsvarer Vakker Suppe er why_the_lucky_stiff sin Hpricot .

Svarte 05/08/2008 kl. 21:13
kilden bruker

stemmer
39

I .NET verden, anbefaler jeg HTML Agility Pack. Ikke i nærheten så enkelt som noen av de ovennevnte alternativene (som HTMLSQL), men det er veldig fleksibel. Den lar deg maniuplate dårlig dannet HTML som om det var godt dannet XML, slik at du kan bruke XPath eller bare itereate løpet noder.

http://www.codeplex.com/htmlagilitypack

Svarte 07/08/2008 kl. 18:38
kilden bruker

stemmer
32

BeautifulSoup er en fin måte å gå for HTML skraping. Min forrige jobb hadde meg å gjøre en masse skraping og jeg skulle ønske jeg visste om BeautifulSoup da jeg begynte. Det er som DOM med mye mer nyttige alternativer, og er mye mer Pytonske. Hvis du ønsker å prøve Ruby de portet BeautifulSoup kalle det RubyfulSoup men det har ikke blitt oppdatert på en stund.

Andre nyttige verktøy er HTMLParser eller sgmllib.SGMLParser som er en del av standard Python biblioteket. Disse fungerer ved å kalle metoder hver gang du går inn / ut en tag og møte html tekst. De er som Expat hvis du er kjent med det. Disse bibliotekene er spesielt nyttig hvis du kommer til å analysere svært store filer og lage en DOM-treet vil bli lang og kostbar.

Regulære uttrykk er ikke veldig nødvendig. BeautifulSoup håndterer regulære uttrykk, så hvis du trenger deres makt kan du bruke den der. Jeg sier gå med BeautifulSoup med mindre du trenger fart og mindre minne fotavtrykk. Hvis du finner en bedre HTML parser på Python, gi meg beskjed.

Svarte 07/08/2008 kl. 18:18
kilden bruker

stemmer
18

Jeg fant HTMLSQL å være en latterlig enkel måte å skjermskrape. Det tar bokstavelig talt minutter å få resultater med det.

Spørringene er super-intuitive - som:

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

Det er nå noen andre alternativer som tar samme tilnærming.

Svarte 07/08/2008 kl. 18:31
kilden bruker

stemmer
16

Python LXML bibliotek virker som et bindende Pytonske for libxml2 og libxslt biblioteker. Jeg liker spesielt dens XPath støtte og pen utskrift av in-minne XML struktur. Den støtter også parsing ødelagt HTML. Og jeg tror ikke du kan finne andre Python bibliotek / bindinger som tolke XML raskere enn LXML.

Svarte 17/09/2008 kl. 12:44
kilden bruker

stemmer
15

For Perl, det er WWW :: mekanisere.

Svarte 05/08/2008 kl. 23:37
kilden bruker

stemmer
11

Hvorfor har ingen nevnt JSOUP ennå for Java? http://jsoup.org/

Svarte 10/02/2012 kl. 19:42
kilden bruker

stemmer
11

'Enkel HTML DOM-parser' er et godt alternativ for PHP, hvis kjent med jQuery eller Javascript-velgere vil du finne deg selv hjemme.

Her finner du det

Det er også et blogginnlegg om det her.

Svarte 31/07/2009 kl. 19:39
kilden bruker

stemmer
10

Python har flere alternativer for HTML skraping i tillegg til Beatiful Soup. Her er noen andre:

  • mekanisere : ligner perl WWW:Mechanize. Gir deg en nettleser som objekt til ineract med websider
  • LXML : Python binding til libwww. Støtter ulike alternativer for å traversere og velge elementer (for eksempel XPath og CSS utvalg)
  • scrapemark : høyt nivå biblioteket ved hjelp av maler for å hente ut informasjon fra HTML.
  • pyquery : lar deg lage jQuery som spørringer på XML-dokumenter.
  • scrapy : et høyt nivå skrape- og webgjennomgangseksperiment rammeverk. Den kan brukes til å skrive edderkopper, for data mining og for overvåking og automatisert testing
Svarte 28/12/2009 kl. 16:59
kilden bruker

stemmer
9

Den templatemaker verktøyet fra Adrian Holovaty (av Django berømmelse) bruker en svært interessant tilnærming: du mate den varianter av samme side, og det "lærer" hvor "hullene" for variable data er. Det er ikke HTML bestemt, så det ville være bra for skraping noen annen klartekst innhold også. Jeg har brukt det også for PDF-filer og HTML konvertert til ren tekst (med pdftotext og gaupe, henholdsvis).

Svarte 18/09/2008 kl. 20:13
kilden bruker

stemmer
7

Jeg kjenner og elsker Screen-Scraper .

Skjerm-skrape er et verktøy for å trekke ut data fra nettsteder. Screen-Scraper automatiserer:

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

Vanlige bruksområder:

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

Teknisk:

* 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

Tre utgaver av skjerm-skrape:

* 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.
Svarte 16/08/2009 kl. 20:56
kilden bruker

stemmer
7

Jeg vil først finne ut om området (e) det gjelder å gi en API-server eller RSS-feeder for tilgang til data du trenger.

Svarte 05/08/2008 kl. 21:11
kilden bruker

stemmer
6

Et annet alternativ for Perl ville være Web :: skrape som er basert på Rubys Scrapi . I et nøtteskall, med fin og konsis syntaks, kan du få en robust skrape direkte i datastrukturer.

Svarte 26/08/2008 kl. 22:46
kilden bruker


stemmer
5

Jeg har hatt noen suksess med HtmlUnit i Java. Det er et enkelt rammeverk for å skrive enhet tester på nettet UI-tallet, men like nyttig for HTML skraping.

Svarte 31/08/2008 kl. 12:09
kilden bruker

stemmer
5

Skraping Stack Overflow er spesielt enkelt med sko og 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
Svarte 22/08/2008 kl. 10:20
kilden bruker

stemmer
4

Det er denne løsningen også: netty Httpclient

Svarte 11/05/2011 kl. 18:28
kilden bruker

stemmer
4

Et annet verktøy for NET er MhtBuilder

Svarte 13/02/2009 kl. 12:58
kilden bruker

stemmer
4

Selv om det er designet for NET web-testing, har jeg vært med Watin rammene for dette formålet. Siden det er DOM-basert, er det ganske lett å fange HTML, tekst eller bilder. Recentely, jeg brukte den til å dumpe en liste over linker fra en Mediawiki Alle sider navnespørring i et Excel-regneark. Følgende VB.NET kode fragement er ganske grov, men det fungerer.


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
Svarte 27/08/2008 kl. 09:43
kilden bruker

stemmer
4

Jeg har brukt Vakker Soup mye med Python. Det er mye bedre enn vanlig uttrykk sjekke, fordi det fungerer som bruker DOM , selv om HTML er dårlig formatert. Du kan raskt finne HTML-koder og tekst med enklere syntaks enn regulære uttrykk. Når du finner et element, kan du iterere over den og dens barn, som er mer nyttig for å forstå innholdet i kode enn det er med regulære uttrykk. Jeg ønsker Vakker Soup eksistert år siden da jeg måtte gjøre mye av skjermskraping - det ville ha spart meg mye tid og hodepine siden HTML strukturen var så dårlig før folk begynte å validere den.

Svarte 22/08/2008 kl. 13:58
kilden bruker

stemmer
4

Jeg bruker Hpricot på Ruby. Som et eksempel er dette en kodebit som jeg bruker til å hente alle boktitler fra de seks sidene i min HireThings konto (som de ikke synes å gi en enkelt side med denne informasjonen):

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 

Det er ganske mye ferdig. Alt som kommer før dette er bibliotek import og innstillingene for min fullmakt.

Svarte 06/08/2008 kl. 05:57
kilden bruker

stemmer
3

Vel, hvis du vil ha det gjort fra klientsiden ved hjelp av bare en nettleser du har jcrawl.com . Etter å ha designet ditt scrapping tjeneste fra web-applikasjon ( http://www.jcrawl.com/app.html ), trenger du bare å legge det genererte skriptet til en HTML-side til å begynne å bruke / presentere dine data.

All opphugging logikken som skjer på nettleseren via Javascript. Jeg håper du finner det nyttig. Klikk på denne linken for en levende eksempel på at trekker ut siste nytt fra Yahoo tennis .

Svarte 29/10/2012 kl. 15:59
kilden bruker

stemmer
3

Implementeringer av HTML5 parsing algoritmen : html5lib (Python, Ruby), Validator.nu HTML-parser (Java, Javascript, C ++ i utvikling), ståhei (C), Twintsam (C #, kommende).

Svarte 09/10/2008 kl. 20:53
kilden bruker

stemmer
3

Du vil være en dåre ikke å bruke Perl .. Her kommer flammene ..

Bone opp på de følgende moduler og ginsu eventuelle skraper rundt.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Svarte 17/09/2008 kl. 12:56
kilden bruker

stemmer
3

I Java, kan du bruke TagSoup .

Svarte 24/08/2008 kl. 10:32
kilden bruker

stemmer
3

Jeg har brukt LWP og HTML :: TreeBuilder med Perl og har funnet dem svært nyttig.

LWP (forkortelse for libwww-perl) lar deg koble til nettsteder og skrape HTML, kan du få modulen her og O'Reilly bok ser ut til å være på nett her .

TreeBuilder lar deg konstruere et tre fra HTML, og dokumentasjon og kilde er tilgjengelig i HTML :: TreeBuilder - parser som bygger en HTML syntaks treet .

Det kan være for mye tunge løft fortsatt å gjøre med noe sånt som denne tilnærmingen skjønt. Jeg har ikke sett på mekanisere modulen foreslått av et annet svar, så jeg kan godt gjøre det.

Svarte 17/08/2008 kl. 14:13
kilden bruker

stemmer
2

Jeg liker Google Spreadsheets' ImportXml (URL, XPath) -funksjonen.

Det vil gjenta celler nedover kolonnen hvis XPath uttrykk returnerer mer enn én verdi.

Du kan ha opptil 50 importxml()funksjoner på ett regneark.

RapidMiner Web Plugin er også ganske enkelt å bruke. Det kan gjøre innlegg, skal godta informasjonskapsler, og kan sette brukeragent .

Svarte 22/07/2010 kl. 04:31
kilden bruker

stemmer
2

Jeg har også hatt stor suksess med Aptana sin Jaxer + jQuery å analysere sider. Det er ikke så rask eller 'script-aktig' i naturen, men jQuery velgere + real Javascript / DOM er en livredder på mer kompliserte (eller misdannede) sider.

Svarte 19/11/2008 kl. 19:11
kilden bruker

stemmer
2

Jeg har hatt blandede resultater i .NET hjelp SgmlReader som opprinnelig ble startet av Chris Lovett og ser ut til å ha blitt oppdatert av Mind .

Svarte 27/08/2008 kl. 18:49
kilden bruker

stemmer
2

Du har sannsynligvis så mye allerede, men jeg tror dette er hva du prøver å gjøre:

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")
Svarte 05/08/2008 kl. 22:58
kilden bruker

stemmer
1

Jeg gjør mye av avanserte web skraping så ønsket å ha total kontroll over min stack og forstå begrensningene. Dette webscraping bibliotek er resultatet.

Svarte 12/04/2011 kl. 00:20
kilden bruker

stemmer
1

Jeg har brukt Feedity - http://feedity.com for noen av skraping arbeid (og konvertering til RSS-feeder) på mitt bibliotek. Det fungerer bra for de fleste nettsider.

Svarte 01/12/2010 kl. 05:28
kilden bruker

stemmer
1

Den nylige snakk med Dav Glass Velkommen til jungelen! (YUIConf 2011 Opening Keynote) viser hvordan du kan bruke YUI trenode.js å gjøre client-lignende programmering (med DOM velgere i stedet for streng behandling) på serveren. Det er veldig imponerende.

Svarte 22/11/2010 kl. 17:04
kilden bruker

stemmer
1

For mer komplekse skraping applikasjoner, vil jeg anbefale IRobotSoft web skrape. Det er en dedikert gratis programvare for skjermskraping. Den har en sterk spørrespråk for HTML-sider, og det gir en veldig enkel web innspillingen grensesnitt som vil frigjøre deg fra mange programmering innsats.

Svarte 17/05/2010 kl. 15:58
kilden bruker

stemmer
1

Scrubyt bruker Ruby og Hpricot å gjøre fin og enkel web skraping. Jeg skrev en skrape for min universitetets bibliotektjeneste bruker denne i ca 30 minutter.

Svarte 25/08/2008 kl. 12:02
kilden bruker

stemmer
1

Regulære uttrykk fungerer ganske bra for HTML skraping samt ;-) Selv etter å se på vakre suppe, kan jeg se hvorfor dette ville være et verdifullt verktøy.

Svarte 05/08/2008 kl. 21:29
kilden bruker

stemmer
0

Når det gjelder å trekke ut data fra en HTML-dokument på serversiden, node.js er et fantastisk alternativ. Jeg har brukt det med hell med to moduler kalt forespørsel og cheerio .

Du kan se et eksempel hvordan det fungerer her .

Svarte 10/05/2013 kl. 18:28
kilden bruker

stemmer
0

Jeg gjorde en veldig fin bibliotek Internett-verktøy for web skraping.

Ideen er å matche en mal mot nettsiden, som vil trekke ut alle data fra siden og også kontrollere om siden strukturen er uendret.

Så du kan bare ta HTML av nettsiden du ønsker å behandle, fjerne all dynamisk eller irrelevant innhold og kommentere de interessante delene.

Eg HTML for et nytt spørsmål på stackoverflow.com indeksen siden er:

<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>

Så du bare fjerne denne bestemte id, tittel og sammendrag, for å lage en mal som vil lese alle nye spørsmål i tittel, sammendrag, link-matriser:

 <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>

Og selvfølgelig den støtter også de grunnleggende teknikker, CSS 3 velgere, XPath 2 og XQuery 1 uttrykk.

Det eneste problemet er at jeg var så dum å gjøre det en gratis Pascal bibliotek. Men det er også språkuavhengig web demo .

Svarte 04/07/2012 kl. 10:43
kilden bruker

stemmer
0

For de som foretrekker en grafisk arbeidsflyt verktøy, RapidMiner (FOSS) har en fin web krypende og skraping anlegget.

Her er en rekke videoer:

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

Svarte 04/04/2011 kl. 22:44
kilden bruker

stemmer
-1

SharpQuery

Det er i utgangspunktet jQuery for C #. Det avhenger av HTML Agility Pack for analyse av HTML.

Svarte 01/12/2010 kl. 05:41
kilden bruker

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