Programmiersprache zum Extrahieren und Analysieren von Text und Statistiken aus Online-Foren. MS-Windows 7 -

Ich bin seit einigen Jahren im Ruhestand, aber ich war früher ein versierter Programmierer. Ich habe OOP und funktionale Sprachen sowie Lisp und Prolog verwendet.

Ich verwende einen Windows 7-Desktop-PC mit hoher Spezifikation.

Frage

Ich möchte schnell eine Software hacken, die sich automatisch bei einer bestimmten Website anmeldet und Text extrahiert. Es muss in der Lage sein, durch Foren zu blättern. Ich werde während der Extraktion vorverarbeiten und dann die von mir erstellten Dateien nachbearbeiten.

Ich bin sehr veraltet mit den Sprachen, die heutzutage verwendet werden. Ich könnte alles in VBA für Excel machen, aber ich denke nicht, dass das die beste Option ist. Außerdem würde ich gerne die Software an Freunde weitergeben können, die vielleicht kein Excel haben.

Idealerweise suche ich eine frei herunterladbare Sprache mit einer einfachen IDE, die sich an der Textverarbeitung orientiert. Ich hätte gerne eine wirklich schnelle Lernkurve, also vermeide ich schwere Allzwecksprachen, bei denen ich mich mit dem Laden von Bibliotheken usw. beschäftigen muss.

Alle Vorschläge und Gründe für Ihre Wahl sind willkommen. Vielen Dank.

Antworten (3)

Python plus eines oder mehrere von Scrapy , Requests , Mechanize usw.

  • Kostenlos und Open Source
  • Funktional, prozedural oder OO Ihrer Wahl Python macht sie alle
  • Plattformübergreifend Vom RaspberryPi zum Supercomputer-Cluster
  • Sehr schnell zu entwickeln und zu debuggen . Sehr prägnante, aber klare Sprache mit einer flachen Lernkurve und wirklich guter Fehlerberichterstattung, Stack-Trace usw.
  • Viele Daten importieren, bearbeiten und exportieren sowohl in den Standardbibliotheken als auch in den unterstützenden Bibliotheken
  • Tolle Community-Unterstützung

Beispiel mit Scrapy von der Dokumentationsseite :

import scrapy

class StackOverflowSpider(scrapy.Spider):
    name = 'stackoverflow'
    start_urls = ['http://stackoverflow.com/questions?sort=votes']

    def parse(self, response):
        for href in response.css('.question-summary h3 a::attr(href)'):
            full_url = response.urljoin(href.extract())
            yield scrapy.Request(full_url, callback=self.parse_question)

    def parse_question(self, response):
        yield {
            'title': response.css('h1 a::text').extract()[0],
            'votes': response.css('.question .vote-count-post::text').extract()[0],
            'body': response.css('.question .post-text').extract()[0],
            'tags': response.css('.question .post-tag::text').extract(),
            'link': response.url,
        }

Dies kann ausgeführt werden als:

scrapy runspider stackoverflow_spider.py -o top-stackoverflow-questions.json

Was ich gerade auf meinem Computer ausprobiert habe und es dauerte weniger als 5 Sekunden, um eine 47k-json-Datei zu erstellen, die beginnt:

Bildschirmfoto

Einfache kostenlose IDE

Es gibt eine große Anzahl kostenloser Python-IDEs, wobei die Präferenz weitgehend eine Frage der persönlichen Wahl ist.

Python kommt standardmäßig mit Leerlauf, was praktikabel, aber begrenzt ist, persönlich kann ich empfehlen: - Wing IDE , die 101-Version ist kostenlos , - SPE , - Spyder , - eric ide

Das Wiki listet viele Entwicklungsumgebungen auf - Sie können sogar Eclipse mit dem pyDev-Paket für volle IDE-Funktionalität verwenden.

Ergänzende Angaben

Wie in den Kommentaren erwähnt, sollte ich der Vollständigkeit halber auch Beautiful Soup erwähnen (und trotzdem Scrapy nehmen ,-) Für eine IDE glauben einige, dass man die Community-Edition von PyCharm , die auch kommerziell verwendet werden kann, nicht schlagen kann. – (Danke Mawg )

Ich stimme zu, würde aber der Vollständigkeit halber auch Beautiful Soup crummy.com/software/BeautifulSoup erwähnen (und immer noch Scrapy verwenden ,-) Für die IDE glaube ich nicht, dass Sie die Community-Edition von PyChaerm jetbrains.com/pycharm schlagen können kann auch gewerblich genutzt werden.

Wenn Sie mit Windows und VBA vertraut sind, gehe ich davon aus, dass Sie es schaffen werden, Glue-Code in C# zu schreiben.

Im Allgemeinen benötigen Sie mindestens 3 Dinge:

  1. HttpClient-Klasse (und verwandte Klassen), die es Ihnen ermöglicht, HTTP-Anforderungen mit HTTP-Sitzungsunterstützung (durch Verwendung von Cookies) zu stellen. Hier ist ein Beispiel:

https://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage

  1. Bibliothek zum Extrahieren von Text aus HTML. Sie können dies natürlich direkt tun, indem Sie HTML in DOM konvertieren und einzelne Fragmente aus dem DOM-Objektbaum extrahieren, aber ich schlage vor, stattdessen die Readability-Bibliothek zu verwenden. Hier ist der Readability-Port zu C#:

https://github.com/marek-stoj/NReadability

  1. Suchen Sie nach der kostenlosen IDE für C# nach Visual Studio Community 2013. Sie ist auch für die kommerzielle Nutzung kostenlos (für Einzelpersonen oder bis zu 250 Computer in einem einzelnen Unternehmen).

Hier ist ein VBScript, das ich geschrieben habe, das das tut.

Es überprüft das lokale Wetter.

Es verwendet Regex, um den Text zu analysieren.

    Option Explicit

    Dim shell   : Set shell = CreateObject("WScript.Shell")
    Const url = "http://www.cdcc.usp.br/clima"
    Dim html, temp, umid, hora

    Function getHtml(byRef url)
        Dim xmlHttp : Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
        xmlHttp.open "get", url, false
        xmlHttp.send
        getHtml = xmlHttp.responseText
    End Function

    Function parseRegEx(byRef sText, byRef regEx)
        Dim oRegx, matches, match, i
        Dim aResults : Redim aResults(0)
        Set oRegx = New RegExp
        With oRegx
            .Pattern    = replace(regEx, "`", chr(34) )
            .IgnoreCase = True
            .Global     = True
        End With

        Set matches = oRegx.Execute(sText)
        if (matches.Count>1) Then
            For Each match in matches
                'msgbox match.Value, 0, "Found Match"
                If match.SubMatches.Count > 0 Then
                    For i = 0 To match.SubMatches.Count-1
                        Redim Preserve aResults(UBound(aResults)+1)
                        aResults(UBound(aResults)-1) = match.SubMatches(i)
                    Next
                Else ' one reult only
                    aResults = match.Value
                End If

            Next
        ElseIf (matches.Count=1) then ' only one match found
            'msgbox matches(0).SubMatches(0)
            'aResults = matches(0).SubMatches(0)
            Redim aResults(1)
            aResults(0) = matches(0).SubMatches(0)
        end If 

        Set oRegx = nothing
        parseRegEx = aResults

    End Function


    html = getHtml(url)
    temp = parseRegEx(html, "<font face=`Arial` size=`5`>(.+)&deg;C<\/font><\/b><\/td>")(0)
    umid = parseRegEx(html, "umidade(?:.+\n).+(\d{2})%")(0)
    hora = parseRegEx(html, "Atualizada &agrave;s: <b>(\S+) <\/b>")(0)

    msgbox temp & "°C", "Umidade: " & umid & "%" & chr(9) & "(" & hora & ")"