ウェブスクレーピングCOM.ネットコア3.1


A . Buscar Algumas Informa Les Hes - es Emサイトque n n ' o o possuにおいて、必要とされるA必須のAは、UMA API para recuperar os dados - necess .ENTは、O、Dedicidi que Iria利用者Alguumas t cicnicasデウェブは、InformaとしてパラBuscarを掻き取ります.jは、haviaのConnuluはDo AlununsウェブスクレーパーのCOM PythonのE PHPを行う.Porのm m、decidi私desdefiar e criar um com.NETコア3.1 e cパラIsoの利用は、Pacote、Prionを得ます.エステ・パロテ・ポッドaqui .
パラの典型的なAquipensador.com , CITAとしてのChea - Thees Chee es es Ficam dispon - Leとしてのe - recon

サラは、projetoをします


Minha必需品時代ConsuuirエッセBancoデCitaは、Ena - Ves Ves、SEM Aを必要とします.Porエステの動機は、Dedici Criar Uma Aplicaは、デlinha de Comando、パラIsZiszei O PRは、prioのテンプレートPIOのテンプレートを修正します.

AP通信のnomear o projeto e realizar suaのクリエラセンシティブo o、esのnecessはrio instalar o pacoteのanglesharp comoのumaはprontoを行う.私たちは、マウスのem '依存性'、e selecionarのopのseo ' oを管理します.VIEMSの可視化について

AP通信のclicarエムInstalar、nosso projeto estはprpraパラシュートで降下します.

acessando oサイト


エーモス・リアライアとしてのエーモス・リアライアセドドアッシム、Decidi Criar NumaパスタサービスeクリアーUMAクラスScrapperService.cs デントロ.エッセ・・・・・・・・・・・・・
ネサクラッセScrapperService.cs ヴァーモ・クリアー・オーナIBrowsingContext , QUE類縁のインターフェースは、Pacote Anglesharpをします、Que Serは、呼吸します.ルルPor fazerは、ルネッサンスのo o s s s p Gasウェブque que desejamos acessarです.CLASSE JUNTO COM O SEU Construtor Ficar - de - Aassim :
using AngleSharp;

namespace PensadorScrapper.Services
{
    class ScrapperService
    {
        private IBrowsingContext context { get; set; }

        public ScrapperService()
        {
            var config = Configuration.Default.WithDefaultLoader();
            context = BrowsingContext.New(config);
        }
    }
}
Nesa Etapa J ' s Podemos Escrever O M ' d ' d ' d ' d ' d ' d ' d ' d ' d ' d ' d ' d ' d ' d ' de the interesse , Many antes ' a intantante abrirmos a p gina em nososo navegador para vermos como o dom est the Organado , Parent ENT Astronomic nossa Estrat - Ge de Obten - Media - Ant Dos Dadosエントは、O、Ao Abrir A P Gen InnologyデAlloum TemaデInteresse Podemos Perceber A Organa Slae o o da p - ginaにあります.Voususer como典型的なCita - es - es com - o - tema de filosofia , p . gina pode ser visualizada abaixo :

<資料>オデ・アナースカルティ・デッタ・フォーマ,コンツェルギオ・ヴィードエゾエス・エ・エヌ・エス・エスノエス・デ・ノセサ・アプシカの詩歌第二次世界大戦の第二次世界大戦についてアッシム、Conseguiremosは、Citaとしてtodasとしてtodasデes de da daとします.
pは、se seをse is is se se se se se se se se se se o o seドキュメントo html、como j -、sabemos nossos elementosデinteresse、podemos clicar com oボットは、o o direito e inspecionar o elemento para irmos diretoにエレno c diditoです.Verifican O Elememento , Podemos Eent Area o o Clicar com O Bot Metho o Direito Novamente e Selecionar a op .エッセン・カミュの研究におけるエッセンシャル・エッセンAiaixo Tuma Imagem Epicificando O que forealizado

Realizando a mesma etapa para o Bloo Das Cita Mes .
  • <論文>トータル・シータについての一考察
  • トダス・シータの『我』について
  • シドニー- es na na classeとしてのCOM Thess DadosエムmScrapperService.cs , TODO Fica Asym :
    public async IAsyncEnumerable<Quote> GetQuotes(string assunto, int pagina)
            {
                var url = $"https://www.pensador.com/{assunto}/{pagina}";
                Console.WriteLine(url);
                var document = await context.OpenAsync(url);
    
                var quotesHtml = document.QuerySelectorAll("#content > div.phrases-list > .thought-card");
    
                foreach (var item in quotesHtml)
                {
                    var autor = item.QuerySelector(".autor").Text();
    
                    int id = int.Parse(item.GetAttribute("data-id"));
    
                    var texto = item.QuerySelector(".frase").Text();
    
                    if(item.QuerySelector(".insert-onlist") != null)
                    {
                        continue;
                    }
    
                    yield return new Quote(id, autor.Trim(), texto.Trim());
                }
            }
    
    Diigo Acima :
  • Criamos um mは、CITAとしてのtodoロバを形づくって、NronoパラBuscarを言います、そして、poisアッシムノッサAplicaは、oを少しずつ動かします.
  • コモAは、gicaをしますmは、todo pode ser aplicada praクスクスP Gen ou Gina ou Tema、Vamos Passar Ses Dois par Extra Metros、Tornando O m Take Mais Adult - en - VELです.

  • montamos ent - o - o acesso concatenando os textos confome o padrについては、サイトの利用を行います.
  • ペンサドールCOM .テナー/ペナナ
  • ペンサドールCOM .autor/nomelose autor/pagina *
  • na linha com o cvar document = await context.OpenAsync(url); レアリラは、レトローラドゥドキュメントント、COM auxは、レオパソテアングロレープを行う.Esse mは、todoのnos retorna um objeto com a pのgina mapeada ondeにposを与えます.

  • コモJは、havは、エーモスAnotado nossos seletores、podemos利用者楽しみを得ます.首都圏としてのトビアスとしての東南アジアにおけるパラ-ソ-ト- o - sso - so - selstor - seloque - a - as - co - como - queメトロ、adicionado da classe que todas cita
  • var quotesHtml = document.QuerySelectorAll("#content > div.phrases-list > .thought-card");
  • AP通信のtermosは、OS N nのものs Das Cita Tes Chee es es、Podemos Iterar Sobre Eles e BuscarとしてInforma Sys - es esとします.Prime - Isoの利用についておしゃれなNesseカススsは、oを送ります:autor、fre e id.
  • コモvocは、pode perceber、esse mがそうであるtodo retorna um objeto引用、e esse objeto deve ser criado por nQuote.cs , クァイ・ポウス・セール・ヴィジュアルライダ・アビオ:
  • namespace PensadorScrapper.Models
    {
        class Quote
        {
            public int Id { get; set; }
            public string Autor { get; set; }
            public string Texto { get; set; }
    
            public Quote(int id, string autor, string texto)
            {
                Id = id;
                Autor = autor;
                Texto = texto;
            }
        }
    }
    
  • DETRO Do la se o o ent o o retornamos esse objeto引用、com auxyield , CITAとしてのque遠い汝es es sejam retornadasアッシズムque forem sendo recuperadasは、サイトをします.
  • E como descobrimosカンタスP .


    <研究ノート>第二次世界大戦中における東南アジアの諸都市についてs e se se quisermos executar nossa aplicaは、p p gginas de um tema ou autorとしてパラシュートで降下します.パラIsoso que salvamos o seletor daquela parte da p del gina que nos info va o n mero total de postPOR - T , M Analtrarmos Outtra p - Le Gina , de Alum Autor Epec - Re - Fico , Por example , Veremos que algumas informa Sys - Hes - Es - Teru - o - diferentes :

    サイト・ペテン師、クアンド・テウム、アーティスタ・ファモソ、ムダ・オー・トゥート・デ・デ・シタ・センシュ・ヘン・エ・トゥーヌ・トゥー・ムダ著『エストラチュラ』のHTML、パラ・アイザント・ent -
  • アーティスタ・ファモソ:シュン
  • テラ・ギルタル:ディンク・ディンプルズ
  • プリサモスの特徴としてのトウ・レイトについてアルマの形態についての一考察ポンダー・エーモス著『エーモス・タームのM - sempre Analisarmos os Elemementos de Pagina』Ma Nessa実装者は、o o vo somente dividir o nを得ます.Ma Sintam SE LivresパラAlterar o cは、digo no github e実装者エサfuncionalidade.<研究ノート>
    public async Task<int> GetTotalPages(string assunto)
            {
    
                var document = await context.OpenAsync($"https://www.pensador.com/{assunto}");
    
                var quotesHtml = document.QuerySelectorAll("#content > div.phrases-list > .thought-card");
                var textoTotal = "";
    
                int quantidadePorPagina;
                int total;
    
                if (document.QuerySelector("#content > div.top > div.total") != null)
                {
                    textoTotal = document.QuerySelector("#content > div.top > div.total").Text();
                    if (int.TryParse(Regex.Match(textoTotal, @"(?<=de )(.*)(?= pensamentos )").Value, out total))
                    {
                        quantidadePorPagina = int.Parse(Regex.Match(textoTotal, @"(?<=-\n)(.\d)(?=)").Value);
                        total = int.Parse(Regex.Match(textoTotal, @"(?<=de )(.*)(?= pensamentos )").Value);
                    }
                    else
                    {
                        total = int.Parse(Regex.Replace(textoTotal, @"[^\d]", ""));
                        quantidadePorPagina = quotesHtml.Count();
                    }
                }
                else
                {
                    total = int.Parse(document.QuerySelector("#content > div.autorTotal > strong:nth-child(2)").Text());
                    var textoPagina = document.QuerySelector("#content > div.autorTotal > strong:nth-child(1)").Text();
                    quantidadePorPagina = int.Parse(Regex.Match(textoPagina, @"(?<= )(.\d)(?=)").Value);
                }
    
                int paginas = total / quantidadePorPagina;
    
                Console.WriteLine("Total: " + total);
                Console.WriteLine("Paginas: " + paginas);
    
                return paginas;
            }
    
    エッセmは、todo ficou um Pouco Extenso、E Poderia Ser Otimizado、Mas DeixaremosパラFazer ParamエムUa Segunda Ver .<研究ノート> A・A・A・A・A・トド・アセサ『プリミラP・グイナ』『アウダ』『テータ』の主題についてVolor合計デCitaは、第1のDial DicidadeデCita Sponge Ees Por Pを得ます.

    アチェサント・トダスP .ギアスド・テメ・エスペ


    『アゴラ』におけるアゴラ・クックの作品について<書評>パラ・イドゥ,ポドモス・アドリアニア・エム・ノッソProgram.cs . CLASSE Fica ASSIM :
    using PensadorScrapper.Services;
    using System;
    
    namespace PensadorScrapper
    {
        class Program
        {
            static async System.Threading.Tasks.Task Main(string[] args)
            {
                ScrapperService scrapper = new ScrapperService();
    
                string assunto = "autor/william_shakespeare";
    
                Console.WriteLine($"\n\n\n\n\n\nAUTOR: william_shakespeare \n\n\n");
    
                var totalPaginas = await scrapper.GetTotalPages(assunto);
                Console.WriteLine("N de paginas: " + totalPaginas);
    
                for (var i = 1; i <= totalPaginas; i++)
                {
                    await foreach (var quote in scrapper.GetQuotes(assunto, i))
                    {
                        Console.WriteLine($"ID: {quote.Id} | Autor: {quote.Autor.Trim()} | Frase: {quote.Texto.Trim()}");
                    }
                    Console.WriteLine($"\n --------Página {i}--------- \n\n");
                }
            }
        }
    }
    
    AO Executarmos o Cは、digo podemos ver como estを得ます

    アイダダ,デ・デスカーモ・ダカエス・デイ・デ・メイ・デ・アウータ・テ・ポイダー『エーモスCriar - Ma Lista de Autores e Iterar sobre ela chamando os nossos mesmos m des todes des des maneira』
    using PensadorScrapper.Models;
    using PensadorScrapper.Services;
    using System;
    using System.Collections.Generic;
    
    namespace PensadorScrapper
    {
        class Program
        {
            static async System.Threading.Tasks.Task Main(string[] args)
            {
                ScrapperService scrapper = new ScrapperService();
    
                List<string> autores = new List<string>{
                    "jean_jacques_rousseau",
                    "rene_descartes",
                    "immanuel_kant",
                    "john_locke",
                    "blaise_pascal",
                    "galileu_galilei",
                    "michel_de_montaigne",
                    "mary_wollstonecraft",
                    "angela_davis",
                    "hipatia_de_alexandria",
                    "maquiavel",
                    "adam_smith",
                    "zygmunt_bauman",
                    "baruch_espinosa",
                    "friedrich_engels",
                    "georg_wilhelm_friedrich_hegel",
                    "soren_kierkegaard",
                    "epicteto",
                    "martin_heidegger",
                    "michel_foucault",
                    "martin_heidegger",
                    "hannah_arendt"
                };
    
                foreach (var autor in autores)
                {
                    string assunto = "autor/"+autor;
    
                    Console.WriteLine($"\n\n\n\n\n\nAUTOR: {autor} \n\n\n");
    
                    var totalPaginas = await scrapper.GetTotalPages(assunto);
                    Console.WriteLine("N de paginas: " + totalPaginas);
    
                    for (var i = 1; i <= totalPaginas; i++)
                    {
                        await foreach (var quote in scrapper.GetQuotes(assunto, i))
                        {
                            Console.WriteLine($"ID: {quote.Id} | Autor: {quote.Autor.Trim()} | Frase: {quote.Texto.Trim()}");
                            QuotesRepository.SaveQuote(quote);
                        }
                        Console.WriteLine($"\n --------Página {i}--------- \n\n");
                    }
                }
    
    
            }
        }
    }
    

    結論


    まあTemos - uma - aplicaは、サイトのペンサバーをこすっています.としてのCOM E retorna todasは、es dispesを引きます.古典的なものとしてのclaro que .Muitasは、必需品ArmazenarエッセInformsitamosエッセンを与えます.POR ESSEの動機は、EUのJは、現実的なTamb - mをAのAのaを得ます.Masa como oポストJは、Ficou Extenso、Vou Tratar desta etapaエムum outroポストaquiです.Usezaremos SQLiteパラArmazenar E Recuperar Sesent Dadoso o c dio complete desse post , COM a ver o o j j . uvzzo o banco de dados pode ser encontrado no meuGithub . Aiaixo Temos um gif da Aplicaは、Faicionandoを支持します: