我試圖用一個c# .net控制臺應用程式從維基百科下載大約250張圖片。 在下載了3張之后,我得到了這個錯誤。
System.Net.WebException: 'The remote server returned an error: (403) Forbidden。請遵守User-Agent政策。https://meta.wikimedia.org/wiki/User-Agent_policy。'
我已經閱讀了他們的User-Agent_policy頁面并添加了一個符合他們所說的用戶代理。(盡我所能,我不是一個Web開發員)
他們說,讓用戶代理符合他們的要求。
他們說,讓它具有描述性,如果它是一個機器人,就包括機器人這個詞,在括號里包括聯系細節,所有這些我都做到了。
我也在每張圖片之間等待5秒鐘。我只是真的真的不想在我的瀏覽器中手動下載它們。
static void DownloadImages()
{
var files = Directory.GetFiles(@"C:projectsCarnivoraData", "*", SearchOption.AllDirectories)。)
var client = new WebClient()。
client.Headers.Add("User-Agent", "bot by <My Name> (<My email address>) I am downloading an image of each carnivoran once (less than 300 images) for educational purposes")。)
foreach (var path in files)
{
/Console.WriteLine(path);
//Console.WriteLine(File.ReadAllText(path));
AnimalData data = JsonSerializer.Deserialize<AnimalData>(File.ReadAllText(path))。
client.DownloadFile("https:" data.Imageurl,@"C:projectsCarnivoraImages" data.Name Path.GetExtension(data.Imageurl)) 。
System.Threading.Thread.Sleep(5000)。
}
有什么建議嗎?
uj5u.com熱心網友回復:
好吧,我得到了這個作業。我認為他們的關鍵是使用 httpclient 來下載檔案,而不是 webclient,并使用 DefaultRequestHeaders.UserAgent.ParseAdd
var httpClient = new HttpClient()。
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("<My Name>/1.0 (<My Email>) bot"/span>)。
我甚至懶得在圖片之間等待,在大約一分鐘內就把它們全部下載了。
另外,作為獎勵,下面是如何使用 httpclient 下載檔案的方法(它比 webclient 要混亂得多!)
static async Task GetFile(HttpClient httpClient, string filepath, string url)
{
using (var stream = await httpClient.GetStreamAsync(new Uri(url))
{
using (var fileStream = new FileStream(filepath, FileMode.CreateNew)
{
await stream.CopyToAsync(fileStream)。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323085.html
標籤:
