He estado jubilado durante algunos años, pero solía ser un programador consumado. He usado lenguajes orientados a objetos y funcionales, así como Lisp y Prolog.
Estoy usando una PC de escritorio con Windows 7 de alta especificación.
Pregunta
Quiero piratear rápidamente algún software que inicie sesión automáticamente en un sitio web específico y extraiga texto. Tendrá que ser capaz de paginar a través de los foros. Preprocesaré mientras hago la extracción y luego postprocesaré los archivos que haya creado.
Estoy muy desactualizado con los idiomas que se usan en estos días. Podría hacerlo todo en VBA para Excel , pero no creo que sea la mejor opción. También me gustaría poder pasar el software a amigos que tal vez no tengan Excel.
Idealmente, estoy buscando un lenguaje de descarga gratuita con un IDE simple que esté orientado al procesamiento de texto. Me gustaría una curva de aprendizaje realmente rápida, así que estoy evitando los lenguajes de uso general pesados que requieren que me equivoque sobre la carga de bibliotecas, etc.
Todas las sugerencias y el motivo de su elección son bienvenidas. Gracias.
Python más uno o más de Scrapy , Requests , Mechanize , etc.
Ejemplo usando Scrapy, del sitio de documentación :
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,
}
Esto se puede ejecutar como:
scrapy runspider stackoverflow_spider.py -o top-stackoverflow-questions.json
Lo acabo de probar en mi computadora y tomó menos de 5 segundos producir un archivo json de 47k que comienza:
Hay una gran cantidad de IDE de Python gratuitos disponibles y la preferencia es en gran medida una cuestión de elección personal.
Python por defecto viene con inactividad que es factible pero limitada, personalmente puedo recomendar: - Wing IDE , la versión 101 es gratuita , - SPE , - Spyder , - eric ide
El wiki enumera una gran cantidad de entornos de desarrollo: puede usar incluso Eclipse con el paquete pyDev para una funcionalidad IDE completa.
Como se mencionó en los comentarios, también debo mencionar Beautiful Soup para completar (y seguir con Scrapy ,-) Para un IDE, algunos no creen que pueda vencer a la edición comunitaria de PyCharm , que también se puede usar comercialmente. – (Gracias Mawg )
Si se siente cómodo con Windows y VBA, supongo que logrará escribir un código de pegamento en C#.
En general, necesitas al menos 3 cosas:
https://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage
https://github.com/marek-stoj/NReadability
Aquí hay un vbscript que escribí que hace eso.
Comprueba el clima local.
Utiliza expresiones regulares para analizar el texto.
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 dice que reincorpore a Monica