Webscraping in C#
O que é o IronWebScraper?
IronWebScraper é uma biblioteca de classes e um framework para C# e a plataforma de programação .NET que permite aos desenvolvedores ler sites programaticamente e extrair seu conteúdo. Isso é ideal para fazer engenharia reversa de sites ou intranets existentes e transformá-los novamente em bancos de dados ou dados JSON. Também é útil para baixar grandes volumes de documentos da internet.
Em muitos aspectos, IronWebScraper é semelhante à biblioteca Scrapy for Python, mas aproveita as vantagens do C#, particularmente sua capacidade de percorrer o código à medida que o processo de raspagem da web está em andamento e depurar.
Instalação
Seu primeiro passo será instalar o IronWebScraper, o que você pode fazer a partir do NuGet ou ao baixar o DLL do nosso site.
Todas as classes de que você precisará podem ser encontradas no namespace IronWebScraper.
Casos de uso populares
Migração de sites para bancos de dados
O IronWebScraper fornece as ferramentas e os métodos que permitem reestruturar seus sites em bancos de dados estruturados. Essa tecnologia é útil ao migrar conteúdo de sites e intranets legados para seu novo aplicativo C#.
Migração de Websites
A capacidade de extrair facilmente o conteúdo de um site, parcial ou completo, em C# reduz o tempo e o custo envolvidos na migração ou atualização de recursos de sites e intranets. Isso pode ser significativamente mais eficiente do que transformações SQL diretas, pois simplifica os dados para o formato visualizável em cada página da web, sem exigir a compreensão das estruturas de dados SQL anteriores ou a criação de consultas SQL complexas.
Preenchendo índices de pesquisa
O IronWebScraper pode ser apontado para o seu próprio site ou intranet para ler dados estruturados, ler cada página e extrair os dados corretos para que um mecanismo de busca dentro da sua organização possa ser populado com precisão.
IronWebScraper é uma ferramenta ideal para extrair conteúdo para o seu índice de pesquisa. Um aplicativo de busca como o IronSearch pode ler conteúdo estruturado do IronWebScraper para construir um poderoso sistema de busca empresarial.
Usando o Iron Webscraper
Para aprender como usar o IronWebScraper, é melhor olhar para exemplos. Este exemplo básico cria uma classe para extrair títulos de um blog de um site.
using IronWebScraper;
namespace WebScrapingProject
{
class MainClass
{
public static void Main(string [] args)
{
var scraper = new BlogScraper();
scraper.Start();
}
}
class BlogScraper : WebScraper
{
// Initialize scraper settings and make the first request
public override void Init()
{
// Set logging level to show all log messages
this.LoggingLevel = WebScraper.LogLevel.All;
// Request the initial page to start scraping
this.Request("https://ironpdf.com/blog/", Parse);
}
// Method to handle parsing of the page response
public override void Parse(Response response)
{
// Loop through each blog post title link found by CSS selector
foreach (var title_link in response.Css("h2.entry-title a"))
{
// Clean and extract the title text
string strTitle = title_link.TextContentClean;
// Store the extracted title for later use
Scrape(new ScrapedData() { { "Title", strTitle } });
}
// Check if there is a link to the previous post page and if exists, follow it
if (response.CssExists("div.prev-post > a[href]"))
{
// Get the URL for the next page
var next_page = response.Css("div.prev-post > a[href]")[0].Attributes["href"];
// Request the next page to continue scraping
this.Request(next_page, Parse);
}
}
}
}Imports IronWebScraper
Namespace WebScrapingProject
Class MainClass
Public Shared Sub Main(ByVal args As String())
Dim scraper As New BlogScraper()
scraper.Start()
End Sub
End Class
Class BlogScraper
Inherits WebScraper
' Initialize scraper settings and make the first request
Public Overrides Sub Init()
' Set logging level to show all log messages
Me.LoggingLevel = WebScraper.LogLevel.All
' Request the initial page to start scraping
Me.Request("https://ironpdf.com/blog/", AddressOf Parse)
End Sub
' Method to handle parsing of the page response
Public Overrides Sub Parse(ByVal response As Response)
' Loop through each blog post title link found by CSS selector
For Each title_link In response.Css("h2.entry-title a")
' Clean and extract the title text
Dim strTitle As String = title_link.TextContentClean
' Store the extracted title for later use
Scrape(New ScrapedData() From {{"Title", strTitle}})
Next
' Check if there is a link to the previous post page and if exists, follow it
If response.CssExists("div.prev-post > a[href]") Then
' Get the URL for the next page
Dim next_page = response.Css("div.prev-post > a[href]")(0).Attributes("href")
' Request the next page to continue scraping
Me.Request(next_page, AddressOf Parse)
End If
End Sub
End Class
End NamespaceImports IronWebScraper
Namespace WebScrapingProject
Class MainClass
Public Shared Sub Main(ByVal args As String())
Dim scraper As New BlogScraper()
scraper.Start()
End Sub
End Class
Class BlogScraper
Inherits WebScraper
' Initialize scraper settings and make the first request
Public Overrides Sub Init()
' Set logging level to show all log messages
Me.LoggingLevel = WebScraper.LogLevel.All
' Request the initial page to start scraping
Me.Request("https://ironpdf.com/blog/", AddressOf Parse)
End Sub
' Method to handle parsing of the page response
Public Overrides Sub Parse(ByVal response As Response)
' Loop through each blog post title link found by CSS selector
For Each title_link In response.Css("h2.entry-title a")
' Clean and extract the title text
Dim strTitle As String = title_link.TextContentClean
' Store the extracted title for later use
Scrape(New ScrapedData() From {{"Title", strTitle}})
Next
' Check if there is a link to the previous post page and if exists, follow it
If response.CssExists("div.prev-post > a[href]") Then
' Get the URL for the next page
Dim next_page = response.Css("div.prev-post > a[href]")(0).Attributes("href")
' Request the next page to continue scraping
Me.Request(next_page, AddressOf Parse)
End If
End Sub
End Class
End NamespacePara extrair dados de um site específico, precisaremos criar nossa própria classe para ler esse site. Essa classe estenderá a classe Web Scraper. Vamos adicionar alguns métodos a esta classe, incluindo Init, onde podemos definir configurações iniciais e iniciar a primeira solicitação, que resultará em uma reação em cadeia onde o site inteiro será raspado.
Também devemos adicionar pelo menos um método Parse. Os métodos de análise sintática leem páginas da web baixadas da internet e usam seletores CSS semelhantes ao jQuery para selecionar o conteúdo e extrair o texto e/ou as imagens relevantes para uso.
Dentro de um método Parse, podemos também especificar quais hiperlinks desejamos que o rastreador continue a seguir e quais ele ignorará.
Podemos usar o método Scrape para extrair quaisquer dados e armazená-los em um formato de arquivo conveniente, semelhante ao JSON, para uso posterior.
Seguindo em frente
Para saber mais sobre o IronWebScraper, recomendamos que você leia a Documentação de Referência de API e, em seguida, comece a olhar os exemplos na seção de tutoriais de nossa documentação.
O próximo exemplo que recomendamos que você veja é o exemplo de web scraping em C# de "blog" , onde aprendemos como podemos extrair o conteúdo de texto de um blog, como um blog do WordPress. Isso pode ser muito útil em uma migração de site.
A partir daí, você pode prosseguir para outros exemplos avançados de tutoriais de web scraping, onde podemos analisar conceitos como sites com muitos tipos diferentes de páginas, sites de comércio eletrônico e também como usar vários proxies, identidades e logins ao extrair dados da internet.
Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.