Ich möchte Titel, Beschreibung und Schlüsselwörter eines Seris von URLs extrahieren
Ich habe diesen Code
WebClient x = new WebClient();
string pageSource = (x.DownloadString(url));
query.title = Regex.Match(pageSource, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
Aber ich möchte nicht ganze Seite herunterladen, weil es für eine Reihe von URLs so zeitaufwendig ist. Gibt es eine Möglichkeit, diese Informationen zu erhalten, ohne die ganze Seite herunterzuladen?
Ich sollte erwähnen, dass ich diese URLs in der Google-Suchergebnisseite kaufe, die Abfrage an Google sendet.
Sie können Teilergebnisse mit HttpClient
anfordern und herunterladen, indem Sie den Bereichskopf angeben. Sie können die Pufferlänge definieren, die Sie herunterladen und lesen möchten:
static void Main()
{
Test().GetAwaiter().GetResult();
}
private static async Task Test()
{
const string url = "http://google.com";
const int bytesToRead = 2000;
using (var httpclient = new HttpClient())
{
httpclient.DefaultRequestHeaders.Range = new RangeHeaderValue(0, bytesToRead);
var response = await httpclient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
using (var stream = await response.Content.ReadAsStreamAsync())
{
var buffer = new byte[bytesToRead];
stream.Read(buffer, 0, buffer.Length);
var partialHtml = Encoding.UTF8.GetString(buffer);
//extract required info from partial html
}
}
}
Das gleiche Ergebnis konnte mit dem "alten" WebClient