Язык программирования для извлечения и анализа текста и статистики с онлайн-форумов. МС Виндовс 7 -

Я уже несколько лет на пенсии, но раньше был опытным программистом. Я использовал ООП и функциональные языки, а также Лисп и Пролог.

Я использую высокопроизводительный настольный ПК с Windows 7.

Вопрос

Я хочу быстро взломать некоторое программное обеспечение, которое будет автоматически входить на указанный веб-сайт и извлекать текст. Он должен будет иметь возможность листать страницы на форумах. Я буду выполнять предварительную обработку во время извлечения, а затем постобработку всех созданных файлов.

Я очень устарел от того, какие языки используются в наши дни. Я мог бы сделать все это в VBA для Excel, но я не думаю, что это лучший вариант. Также я хотел бы иметь возможность передавать программное обеспечение друзьям, у которых может не быть Excel.

В идеале я ищу свободно загружаемый язык с простой IDE, ориентированной на обработку текста. Я хотел бы очень быстро научиться, поэтому я избегаю универсальных языков для тяжелых условий эксплуатации, которые требуют от меня хлопот о загрузке библиотек и т. д.

Приветствуются все предложения и причины вашего выбора. Спасибо.

Ответы (3)

Python плюс один или несколько из Scrapy , Requests , Mechanize и т. д.

  • Бесплатно бесплатно и с открытым исходным кодом
  • Функциональный, процедурный или объектно-ориентированный на ваш выбор Python делает их все
  • Кроссплатформенность От RaspberryPi до суперкомпьютерного кластера
  • Очень быстрая разработка и отладка . Очень краткий, но понятный язык с несложной кривой обучения и действительно хорошими отчетами об ошибках, трассировкой стека и т. д.
  • Импорт, обработка и экспорт большого количества данных как в стандартных библиотеках, так и в вспомогательных библиотеках.
  • Отличная поддержка сообщества

Пример использования Scrapy с сайта документации :

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

Это можно запустить как:

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

Что я только что попробовал на своем компьютере, и мне потребовалось менее 5 секунд, чтобы создать файл json размером 47 КБ, который запускается:

Скриншот

Простая бесплатная IDE

Существует большое количество бесплатных IDE для Python, и предпочтение в значительной степени зависит от личного выбора.

Python по умолчанию поставляется с холостым ходом, который работоспособен, но ограничен, лично я могу порекомендовать: - Wing IDE , версия 101 бесплатна , - SPE , - Spyder , - eric ide

Вики перечисляет множество сред разработки — вы можете использовать даже Eclipse с пакетом pyDev для полной функциональности IDE .

Дополнительная информация

Как упоминалось в комментариях, я должен также упомянуть Beautiful Soup для полноты картины (и по-прежнему использовать Scrapy,-). Для IDE некоторые не думают, что вы можете превзойти версию PyCharm для сообщества, которую также можно использовать в коммерческих целях. - (Спасибо Мауг )

Я согласен, но я бы также упомянул Beautiful Soup crummy.com/software/BeautifulSoup для полноты картины (и по-прежнему использую Scrapy,-) Для IDE я не думаю, что вы можете превзойти версию сообщества PyChaerm jetbrains.com/pycharm, которая также может использоваться в коммерческих целях.

Если вы хорошо разбираетесь в Windows и VBA, то я предполагаю, что вам удастся написать некоторый связующий код на C#.

В общем, вам нужно как минимум 3 вещи:

  1. Класс HttpClient (и связанные классы), который позволит вам выполнять HTTP-запросы с поддержкой сеанса HTTP (с использованием файлов cookie). Вот пример:

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

  1. Библиотека для извлечения текста из html. Вы, конечно, можете сделать это напрямую, конвертируя html в DOM и извлекая отдельные фрагменты из дерева объектов DOM, но вместо этого я предлагаю использовать библиотеку Readability. Вот порт Readability на С#:

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

  1. Что касается бесплатной IDE для C#, ищите Visual Studio Community 2013. Она также бесплатна для коммерческого использования (для частных лиц или до 250 компьютеров в одной компании).

Вот vbscript, который я написал, который делает это.

Он проверяет местную погоду.

Он использует регулярное выражение для анализа текста.

    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 & ")"