C#初学者向けに私が詰まったポイントと解決のために閲覧したWebページを貼っておきます。
** やりたいこと**
BASIC認証のあるサイトに対してC#でスクレイピング
コード
internal class scraping
{
public async void Scraping()
{
var uri = new Uri(@"http://kaiin:naisho@leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/secret/kaiin_page_top.htm");
var client = new HttpClient();
// 認証情報の指定がない場合は string.Empty になる
if (!string.IsNullOrWhiteSpace(uri.UserInfo))
{
// 認証情報が指定されていたらヘッダーを設定
var bytes = Encoding.UTF8.GetBytes(uri.UserInfo);
var base64 = Convert.ToBase64String(bytes);
client.DefaultRequestHeaders.Authorization = new("Basic", base64);
}
// まずは、スクレイピングするデータを取得
var doc = default(IHtmlDocument);
var stream = await client.GetStreamAsync(uri);
var parser = new HtmlParser();
doc = await parser.ParseDocumentAsync(stream);
Console.WriteLine(doc.Body.InnerHtml);
}
static void Main(string[] args)
{
scraping scraping = new scraping();
scraping.Scraping();
Thread.Sleep(10000);
}
}
詰まった(詰まっている点)
- awaitの挙動。上のコードではMain関数で10秒待っているので大丈夫ですが、
Thread.Sleep(10000)
を外すとスクレイピング開始度同時に終了する - BASIC認証の方法