1 место Универсальный экстрактор™ контента (основной статьи страницы)

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 866
Баллы
113
У меня на днях получилось, но ещё толком не тестировал. И я в Go не понимаю вообще ничего, всё делаете на свой страх и риск )
Попробуйте заменить ваш файл readability_cli.go на этот.
Запоздалое, но спасибо за исправление :-) У меня и вправду не было времени вникать и исправлять этот код, т.к. я тоже в golang не особо разбираюсь)

Да не за что. Если разберешься с шаблоном, отпишись пожалуйста, можно ли вытянуть статью с html-тегами. Можно без подробностей, просто: есть такая возможность или нет.
Такая возможность заложена в самой библиотеке, в шаблоне, конечно, потом тоже нужно отключить удаление ссылок и всё остальное связанное, но для получения именно нужного HTML – достаточно в readability_cli.go найти:
C#:
dstTxtFile.WriteString(article.TextContent)
И заменить на:
C#:
dstTxtFile.WriteString(article.Content)
К слову, это всё указано в readme к библиотеке: https://github.com/go-shiori/go-readability

UPD (Очень важно): cтоит учесть, что в исправленном коде вы 2 раза делаете запрос для получения контента. Вначале в зенке парсится контент, а потом в readability_cli.go делается запрос ещё раз. Скорее всего правильнее использовать readability.FromReader. Кому это критично - лучше исправьте у себя :-)
 
  • Спасибо
Реакции: udder, K R и Astraport

K R

Client
Регистрация
14.01.2017
Сообщения
121
Благодарностей
120
Баллы
43
UPD (Очень важно): cтоит учесть, что в исправленном коде вы 2 раза делаете запрос для получения контента. Вначале в зенке парсится контент, а потом в readability_cli.go делается запрос ещё раз. Скорее всего правильнее использовать readability.FromReader. Кому это критично - лучше исправьте у себя :-)
Вот этот момент я планировал разобрать и уже начал копать, но не довёл до конца, поменялись планы. Возможно выложу исправленную версию когда/если вернусь к этому вопросу.
Выше уже ответили насчет парсинга с тегами, плюс документацию потом изучил вдоль и поперёк, спасибо!
 
  • Спасибо
Реакции: udder

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 866
Баллы
113
Вот этот момент я планировал разобрать и уже начал копать, но не довёл до конца, поменялись планы. Возможно выложу исправленную версию когда/если вернусь к этому вопросу.
Можно взять за основу их пример: https://github.com/go-shiori/go-readability/blob/master/cmd/go-readability/main.go#L115-L139
 
  • Спасибо
Реакции: K R

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
UPD (Очень важно): cтоит учесть, что в исправленном коде вы 2 раза делаете запрос для получения контента. Вначале в зенке парсится контент, а потом в readability_cli.go делается запрос ещё раз. Скорее всего правильнее использовать readability.FromReader. Кому это критично - лучше исправьте у себя :-)
Хочу попробовать исправить как вы советуете, но ведь в исправленном варианте уже есть readability.FromReader , как нужно исправить чтобы два запроса не делать?) @Lord_Alfred @K R
90769
 

Droppex

Client
Регистрация
30.05.2013
Сообщения
78
Благодарностей
16
Баллы
8
fix

C#:
parsedURL, _ := nurl.ParseRequestURI(url)
replace with:
C#:
parsedURL, _ := nurl.Parse(url)
 
Последнее редактирование:

snif_ram

Client
Регистрация
17.12.2010
Сообщения
42
Благодарностей
2
Баллы
8
Добрый день,
у кого есть рабочий вариант данного парсера - все попытки пройтись по инструкции и вычитывания форума не привели к нужному результату
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 866
Баллы
113
Данный вариант не заработает с выложенным шаблоном (потому что по-другому называются аргументы команды), но при желании шаблон и допилить можно:
C#:
package main

import (
    "fmt"
    "log"
    "os"
    nurl "net/url"

    readability "github.com/go-shiori/go-readability"
    "github.com/urfave/cli"
)

func main() {
    app := &cli.App{
        Flags: []cli.Flag{
            &cli.StringFlag{
                Name:  "url",
                Usage: "URL (only for statistics)",
            },
            &cli.StringFlag{
                Name:  "fin",
                Usage: "Input filepath with full http response (html without headers)",
            },
            &cli.StringFlag{
                Name:  "fout_text",
                Usage: "Result filepath for save article text",
            },
            &cli.StringFlag{
                Name:  "fout_html",
                Usage: "Result filepath for save article html",
            },
        },

        Action: func(c *cli.Context) error {
            url := c.String("url")
            if url == "" {
                fmt.Print("--url param is empty")
                return nil
            }

            fin := c.String("fin")
            _, err := os.Stat(fin)
            if os.IsNotExist(err) {
                fmt.Print("Input file from --fin param not exists")
                return nil
            }

            f, err := os.Open(fin)
            defer f.Close()
            if err != nil {
                panic(err)
            }
           
            var (
                pageURL   *nurl.URL
            )
            pageURL, _ = nurl.ParseRequestURI(url)

            // Get readable content from the reader
            article, err := readability.FromReader(f, pageURL)
            if err != nil {
                panic(err)
            }

            fout_text := c.String("fout_text")
            dstTxtFile, _ := os.Create(fout_text)
            defer dstTxtFile.Close()
            dstTxtFile.WriteString(article.TextContent)
           
            fout_html := c.String("fout_html")
            dstHtmlFile, _ := os.Create(fout_html)
            defer dstHtmlFile.Close()
            dstHtmlFile.WriteString(article.Content)

            fmt.Printf("SuccessReadability")
            return nil
        },
    }

    err := app.Run(os.Args)
    if err != nil {
        log.Fatal(err)
    }
}
 

awm

Client
Регистрация
02.11.2011
Сообщения
160
Благодарностей
44
Баллы
28
Появилась нужда в текстах решил затестить этот парсер, но что то пошло не так. Из перевода понятно только : неопределенный : небезопасный фрагмент. Можно как то исправить?
 

Вложения

  • 91,9 КБ Просмотры: 145

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
41
Баллы
28
Какие версии модулей были у автора? При попытке скомпилировать его файл выдает ошибку:
# command-line-arguments
.\readability_cli.go:51:46: cannot use url (variable of type string) as type *url.URL in argument to readability.FromReader
 

Кто просматривает тему: (Всего: 4, Пользователи: 0, Гости: 4)