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.
Python plus eines oder mehrere von Scrapy , Requests , Mechanize usw.
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:
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.
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 )
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:
https://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage
https://github.com/marek-stoj/NReadability
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`>(.+)°C<\/font><\/b><\/td>")(0)
umid = parseRegEx(html, "umidade(?:.+\n).+(\d{2})%")(0)
hora = parseRegEx(html, "Atualizada às: <b>(\S+) <\/b>")(0)
msgbox temp & "°C", "Umidade: " & umid & "%" & chr(9) & "(" & hora & ")"
Mawg sagt, Monica wieder einzusetzen