仅仅是个示例
我的需求是:需要爬取指定路径的图片,把爬取到的图片保存到我的本地,并且在页面中显示爬取的图片。
分析:
1.假设目标网站上有反爬虫机制
2.可以使用Winform,WPF窗体程序写,我选择的是WPF。
3. 需求解决。
首先需要有页面,需要一个输入网址的TextBox输入框,以及一个Button按钮,再来个Image图片显示。
以下为XAML代码:
<!--创建新的窗体或者使用MainWindow都可以-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox x:Name="imgpath" Width="400" Height="30"/>
<Button Click="Button_Click" Height="30" Width="100" HorizontalAlignment="Left" Margin="40,0,0,0" Content="点击获取"/>
<Image x:Name="img" Grid.Row="1" Width="400"/>
</Grid>
以下为C#逻辑代码:
// 创建个异步方法
public async void image()
{
// 目标网站的图片URL
string imageUrl = imgpath.Text;
string localFilePath = "image.jpeg"; // 本地保存的文件路径
// 创建HttpClient实例以模拟浏览器行为
using (HttpClient httpClient = new HttpClient())
{
// 设置User-Agent为常见的浏览器标识,以避免被检测为非正常请求
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/*")); // 指定接受的媒体类型为图片
try
{
// 发送GET请求获取图片内容
HttpResponseMessage response = await httpClient.GetAsync(imageUrl);
response.EnsureSuccessStatusCode(); // 确保请求成功
byte[] imageBytes = await response.Content.ReadAsByteArrayAsync(); // 读取图片内容为字节数组
// 将图片内容写入本地文件
File.WriteAllBytes(localFilePath, imageBytes);
MessageBox.Show("图片已成功爬取并保存到" + localFilePath);
}
catch (HttpRequestException e)
{
MessageBox.Show("请求异常"+e.Message);
}
}
}
// 点击事件
private void Button_Click(object sender, RoutedEventArgs e)
{
image();
//保存之后,读取图片
img.Source = new BitmapImage(new Uri(imgpath.Text));
}
以下为显示页面
目标网站图片显示
把网址复制到文本框中并点击获取。
以上就是全过程,有兴趣的可以试一下,虽然功能很鸡肋。