Advanced Webscraping Features in C
Recurso HttpIdentity
Alguns sistemas de websites exigem que o usuário faça login para visualizar o conteúdo; neste caso podemos usar um HttpIdentity. Veja como você pode configurar:
// Create a new instance of HttpIdentity
HttpIdentity id = new HttpIdentity();
// Set the network username and password for authentication
id.NetworkUsername = "username";
id.NetworkPassword = "pwd";
// Add the identity to the collection of identities
Identities.Add(id);
// Create a new instance of HttpIdentity
HttpIdentity id = new HttpIdentity();
// Set the network username and password for authentication
id.NetworkUsername = "username";
id.NetworkPassword = "pwd";
// Add the identity to the collection of identities
Identities.Add(id);
' Create a new instance of HttpIdentity
Dim id As New HttpIdentity()
' Set the network username and password for authentication
id.NetworkUsername = "username"
id.NetworkPassword = "pwd"
' Add the identity to the collection of identities
Identities.Add(id)
Uma das funcionalidades mais impressionantes e poderosas do IronWebScraper é a capacidade de usar milhares de credenciais de usuário exclusivas e/ou mecanismos de navegador para falsificar ou extrair dados de sites usando várias sessões de login.
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Define an array of proxies
var proxies = "IP-Proxy1:8080,IP-Proxy2:8081".Split(',');
// Iterate over common Chrome desktop user agents
foreach (var UA in IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents)
{
// Iterate over the proxies
foreach (var proxy in proxies)
{
// Add a new HTTP identity with specific user agent and proxy
Identities.Add(new HttpIdentity()
{
UserAgent = UA,
UseCookies = true,
Proxy = proxy
});
}
}
// Make an initial request to the website with a parse method
this.Request("http://www.Website.com", Parse);
}
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Define an array of proxies
var proxies = "IP-Proxy1:8080,IP-Proxy2:8081".Split(',');
// Iterate over common Chrome desktop user agents
foreach (var UA in IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents)
{
// Iterate over the proxies
foreach (var proxy in proxies)
{
// Add a new HTTP identity with specific user agent and proxy
Identities.Add(new HttpIdentity()
{
UserAgent = UA,
UseCookies = true,
Proxy = proxy
});
}
}
// Make an initial request to the website with a parse method
this.Request("http://www.Website.com", Parse);
}
Public Overrides Sub Init()
' Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey"
' Set the logging level to capture all logs
Me.LoggingLevel = WebScraper.LogLevel.All
' Assign the working directory for the output files
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
' Define an array of proxies
Dim proxies = "IP-Proxy1:8080,IP-Proxy2:8081".Split(","c)
' Iterate over common Chrome desktop user agents
For Each UA In IronWebScraper.CommonUserAgents.ChromeDesktopUserAgents
' Iterate over the proxies
For Each proxy In proxies
' Add a new HTTP identity with specific user agent and proxy
Identities.Add(New HttpIdentity() With {
.UserAgent = UA,
.UseCookies = True,
.Proxy = proxy
})
Next proxy
Next UA
' Make an initial request to the website with a parse method
Me.Request("http://www.Website.com", Parse)
End Sub
Você tem várias propriedades para lhe fornecer comportamentos diferentes, evitando que sites o bloqueiem.
Algumas dessas propriedades incluem:
NetworkDomain: O domínio de rede a ser usado para autenticação do usuário. Compatível com redes Windows, NTLM, Kerberos, Linux, BSD e Mac OS X. Deve ser usado comNetworkUsernameeNetworkPassword.NetworkUsername: O nome de usuário de rede/http a ser usado para autenticação do usuário. Compatível com HTTP, redes Windows, NTLM, Kerberos, redes Linux, redes BSD e Mac OS.NetworkPassword: A senha de rede/http a ser usada para autenticação do usuário. Compatível com HTTP, redes Windows, NTLM, Kerberos, redes Linux, redes BSD e Mac OS.Proxy: Para configurar as definições de proxy.UserAgent: Para definir um mecanismo de navegador (por exemplo, Chrome para desktop, Chrome para dispositivos móveis, Chrome para tablets, IE e Firefox, etc.).HttpRequestHeaders: Para valores de cabeçalho personalizados que serão usados com esta identidade, aceita um objeto de dicionárioDictionary<string, string>.UseCookies: Ativar/desativar o uso de cookies.
O IronWebScraper executa o scraper usando identidades aleatórias. Se precisarmos especificar o uso de uma identidade específica para analisar uma página, podemos fazê-lo:
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Create a new instance of HttpIdentity
HttpIdentity identity = new HttpIdentity();
// Set the network username and password for authentication
identity.NetworkUsername = "username";
identity.NetworkPassword = "pwd";
// Add the identity to the collection of identities
Identities.Add(identity);
// Make a request to the website with the specified identity
this.Request("http://www.Website.com", Parse, identity);
}
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Create a new instance of HttpIdentity
HttpIdentity identity = new HttpIdentity();
// Set the network username and password for authentication
identity.NetworkUsername = "username";
identity.NetworkPassword = "pwd";
// Add the identity to the collection of identities
Identities.Add(identity);
// Make a request to the website with the specified identity
this.Request("http://www.Website.com", Parse, identity);
}
Public Overrides Sub Init()
' Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey"
' Set the logging level to capture all logs
Me.LoggingLevel = WebScraper.LogLevel.All
' Assign the working directory for the output files
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
' Create a new instance of HttpIdentity
Dim identity As New HttpIdentity()
' Set the network username and password for authentication
identity.NetworkUsername = "username"
identity.NetworkPassword = "pwd"
' Add the identity to the collection of identities
Identities.Add(identity)
' Make a request to the website with the specified identity
Me.Request("http://www.Website.com", Parse, identity)
End Sub
Ative o recurso de cache da Web
Essa funcionalidade é usada para armazenar em cache as páginas solicitadas. É frequentemente utilizado nas fases de desenvolvimento e teste, permitindo que os desenvolvedores armazenem em cache as páginas necessárias para reutilização após a atualização do código. Isso permite que você execute seu código em páginas em cache após reiniciar seu web scraper, sem precisar se conectar ao site ativo todas as vezes (ação-replay).
Você pode usá-lo no método Init():
// Enable web cache without an expiration time
EnableWebCache();
// OR enable web cache with a specified expiration time
EnableWebCache(new TimeSpan(1, 30, 30));
// Enable web cache without an expiration time
EnableWebCache();
// OR enable web cache with a specified expiration time
EnableWebCache(new TimeSpan(1, 30, 30));
' Enable web cache without an expiration time
EnableWebCache()
' OR enable web cache with a specified expiration time
EnableWebCache(New TimeSpan(1, 30, 30))
Isso salvará seus dados em cache na pasta WebCache dentro da pasta do diretório de trabalho.
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Enable web cache with a specific expiration time of 1 hour, 30 minutes, and 30 seconds
EnableWebCache(new TimeSpan(1, 30, 30));
// Make an initial request to the website with a parse method
this.Request("http://www.Website.com", Parse);
}
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Enable web cache with a specific expiration time of 1 hour, 30 minutes, and 30 seconds
EnableWebCache(new TimeSpan(1, 30, 30));
// Make an initial request to the website with a parse method
this.Request("http://www.Website.com", Parse);
}
Public Overrides Sub Init()
' Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey"
' Set the logging level to capture all logs
Me.LoggingLevel = WebScraper.LogLevel.All
' Assign the working directory for the output files
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
' Enable web cache with a specific expiration time of 1 hour, 30 minutes, and 30 seconds
EnableWebCache(New TimeSpan(1, 30, 30))
' Make an initial request to the website with a parse method
Me.Request("http://www.Website.com", Parse)
End Sub
O IronWebscraper também possui recursos para permitir que seu mecanismo continue a extrair dados após a reinicialização do código, definindo o nome do processo de inicialização do mecanismo usando Start(CrawlID).
static void Main(string[] args)
{
// Create an object from the Scraper class
EngineScraper scrape = new EngineScraper();
// Start the scraping process with the specified crawl ID
scrape.Start("enginestate");
}
static void Main(string[] args)
{
// Create an object from the Scraper class
EngineScraper scrape = new EngineScraper();
// Start the scraping process with the specified crawl ID
scrape.Start("enginestate");
}
Shared Sub Main(ByVal args() As String)
' Create an object from the Scraper class
Dim scrape As New EngineScraper()
' Start the scraping process with the specified crawl ID
scrape.Start("enginestate")
End Sub
A solicitação e a resposta de execução serão salvas na pasta SavedState dentro do diretório de trabalho.
Limitação de velocidade
Podemos controlar o número mínimo e máximo de conexões e a velocidade de conexão por domínio.
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Set the total number of allowed open HTTP requests (threads)
this.MaxHttpConnectionLimit = 80;
// Set minimum polite delay (pause) between requests to a given domain or IP address
this.RateLimitPerHost = TimeSpan.FromMilliseconds(50);
// Set the allowed number of concurrent HTTP requests (threads) per hostname or IP address
this.OpenConnectionLimitPerHost = 25;
// Do not obey the robots.txt files
this.ObeyRobotsDotTxt = false;
// Makes the WebScraper intelligently throttle requests not only by hostname, but also by host servers' IP addresses
this.ThrottleMode = Throttle.ByDomainHostName;
// Make an initial request to the website with a parse method
this.Request("https://www.Website.com", Parse);
}
public override void Init()
{
// Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey";
// Set the logging level to capture all logs
this.LoggingLevel = WebScraper.LogLevel.All;
// Assign the working directory for the output files
this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
// Set the total number of allowed open HTTP requests (threads)
this.MaxHttpConnectionLimit = 80;
// Set minimum polite delay (pause) between requests to a given domain or IP address
this.RateLimitPerHost = TimeSpan.FromMilliseconds(50);
// Set the allowed number of concurrent HTTP requests (threads) per hostname or IP address
this.OpenConnectionLimitPerHost = 25;
// Do not obey the robots.txt files
this.ObeyRobotsDotTxt = false;
// Makes the WebScraper intelligently throttle requests not only by hostname, but also by host servers' IP addresses
this.ThrottleMode = Throttle.ByDomainHostName;
// Make an initial request to the website with a parse method
this.Request("https://www.Website.com", Parse);
}
Public Overrides Sub Init()
' Set the license key for IronWebScraper
License.LicenseKey = "LicenseKey"
' Set the logging level to capture all logs
Me.LoggingLevel = WebScraper.LogLevel.All
' Assign the working directory for the output files
Me.WorkingDirectory = AppSetting.GetAppRoot() & "\ShoppingSiteSample\Output\"
' Set the total number of allowed open HTTP requests (threads)
Me.MaxHttpConnectionLimit = 80
' Set minimum polite delay (pause) between requests to a given domain or IP address
Me.RateLimitPerHost = TimeSpan.FromMilliseconds(50)
' Set the allowed number of concurrent HTTP requests (threads) per hostname or IP address
Me.OpenConnectionLimitPerHost = 25
' Do not obey the robots.txt files
Me.ObeyRobotsDotTxt = False
' Makes the WebScraper intelligently throttle requests not only by hostname, but also by host servers' IP addresses
Me.ThrottleMode = Throttle.ByDomainHostName
' Make an initial request to the website with a parse method
Me.Request("https://www.Website.com", Parse)
End Sub
Propriedades de estrangulamento
MaxHttpConnectionLimitNúmero total de requisições HTTP abertas permitidas (threads)RateLimitPerHostTempo mínimo de espera ou pausa (em milissegundos) entre solicitações para um determinado domínio ou endereço IP.OpenConnectionLimitPerHostNúmero permitido de requisições HTTP simultâneas (threads) por nome de host.ThrottleModeFaz com que o WebScraper limite as solicitações de forma inteligente, não apenas pelo nome do host, mas também pelos endereços IP dos servidores de hospedagem. Isso é uma medida de cortesia caso vários domínios coletados estejam hospedados na mesma máquina.
Comece com IronWebScraper
!{--010011000100100101000010010100100100000101010010010110010101111101010011010101000100000101010010010101000101111101010001010010010010010010100000101001100010111110100001001001100010011110100001101001011--}
Perguntas frequentes
Como posso autenticar usuários em sites que exigem login usando C#?
Você pode utilizar o recurso HttpIdentity no IronWebScraper para autenticar usuários configurando propriedades como NetworkDomain , NetworkUsername e NetworkPassword .
Qual a vantagem de usar cache web durante o desenvolvimento?
O recurso de cache da web permite armazenar em cache as páginas solicitadas para reutilização, o que ajuda a economizar tempo e recursos, evitando conexões repetidas a sites ativos, sendo especialmente útil durante as fases de desenvolvimento e teste.
Como posso gerenciar várias sessões de login em web scraping?
O IronWebScraper permite o uso de milhares de credenciais de usuário exclusivas e mecanismos de navegador para simular várias sessões de login, o que ajuda a impedir que os sites detectem e bloqueiem o programa.
Quais são as opções avançadas de limitação de taxa na extração de dados da web?
O IronWebScraper oferece uma configuração ThrottleMode que gerencia de forma inteligente a limitação de requisições com base em nomes de host e endereços IP, garantindo uma interação adequada com ambientes de hospedagem compartilhada.
Como posso usar um proxy com o IronWebScraper?
Para usar um proxy, defina uma matriz de proxies e associe-os a instâncias HttpIdentity no IronWebScraper, permitindo que as solicitações sejam roteadas por meio de diferentes endereços IP para anonimato e controle de acesso.
Como o IronWebScraper lida com atrasos nas requisições para evitar sobrecarga do servidor?
A configuração RateLimitPerHost no IronWebScraper especifica o atraso mínimo entre as solicitações para um domínio ou endereço IP específico, ajudando a evitar a sobrecarga do servidor ao espaçar as solicitações.
É possível retomar a extração de dados da web após uma interrupção?
Sim, o IronWebScraper pode retomar a coleta de dados após uma interrupção usando o método Start(CrawlID) , que salva o estado da execução e retoma do último ponto salvo.
Como faço para controlar o número de conexões HTTP simultâneas em um web scraper?
No IronWebScraper, você pode definir a propriedade MaxHttpConnectionLimit para controlar o número total de solicitações HTTP abertas permitidas, ajudando a gerenciar a carga e os recursos do servidor.
Quais opções estão disponíveis para registrar atividades de web scraping?
O IronWebScraper permite definir o nível de registro usando a propriedade LoggingLevel , possibilitando um registro abrangente para análise detalhada e solução de problemas durante as operações de extração de dados.

