注意: IP代理精灵仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

请登录 注册

首页 > 新闻资讯 > C#网络爬虫代理ip如何抓取图片?

C#网络爬虫代理ip如何抓取图片?

来源:互联网 作者:admin 时间:2019-09-13 17:29:00

  C#网络爬虫代理ip如何抓取图片?精灵代理IP技术今天要给大家分享干货,最近精灵代理IP技术在研究C#爬虫,先从简单的指定网站图片爬虫开始。其次就是代理ip,使用代理精灵IP成功率更高,真实高质量高匿代理IP,分布式。

C#网络爬虫代理ip如何抓取图片?

  下面就和大家分享一下我们用精灵代理ip的思路:

  1. 在基址采集图片

  2. 去基址采集链接

  3. 把采集到的链接放入队列

  4. 继续采集图片,然后继续采集链接,无限循环

  这里准备了4个队列

  1. 等待采集链接的 NconnUrls

  2. 等待采集图片链接的 LoadingUrls

  3. 已经采集过图片的链接 UsedUrls

  4. 已经采集过链接的链接 UsedConnUrls

  5. 已经使用过的图片链接 UsedImgUrls

  《精灵代理IP四大优势,稳固品牌地位》

  1、资源优势:代理节点覆盖全国各省市

  聚合多种高质量节点资源,其中拨号节点600+,个人节点20000+,散段IP随机分配。

  2、技术优势:自主研发的代理服务器

  超过8年研发高性能web服务器,具有丰富的大规模分布式系统设计经验。

  3、服务优势:1v1服务,提升客户价值

  从注册账户到客户消费,您都可以享受精灵代理平台贯穿生命周期的尊贵1v1服务。

  4、经验优势:行业定制方案超过80例

  4年内为多家小中企业定制专属代理服务器池方案。客户好评率高达99%。

C#网络爬虫代理ip如何抓取图片?

  这里分享一下源代码:

  获取网页的HTML,这里说一下我在编写的时候遇到的bug,首先是代理ip的价格,刚抓去了几个页面,HttpWebRequest就抓取不到页面了,全是操作超时,原因就是HttpWebRequest用完了没关。

  /// 获取HTML所有的源代码

  public static string HtmlCode(string url)

  {

  if (string.IsNullOrEmpty(url))

  {

  return "";

  }

  try

  {

  //创建一个请求

  HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url);

  webReq.KeepAlive = false;

  webReq.Method = "GET";

  webReq.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0";

  webReq.ServicePoint.Expect100Continue = false;

  webReq.Timeout = 5000;

  webReq.AllowAutoRedirect = true;//是否允许302

  ServicePointManager.DefaultConnectionLimit = 20;

  //获取响应

  HttpWebResponse webRes = (HttpWebResponse)webReq.GetResponse();

  string content = string.Empty;

  using (System.IO.Stream stream = webRes.GetResponseStream())

  {

  using (System.IO.StreamReader reader =

  new StreamReader(stream, System.Text.Encoding.GetEncoding("utf-8")))

  {

  content = reader.ReadToEnd();

  }

  }

  webReq.Abort();

  return content;

  }

  catch (Exception)

  {

  return "";

  }

  }

  用正则表达式筛选HTML中的img

  12345678910111213141516171819202122232425 ///

  /// 取得HTML中所有图片的 URL。

  ///

  /// HTML代码

  /// 图片的URL列表

  public static List GetHtmlImageUrlList(string url)

  {

  string html = HttpHelper.HtmlCode(url);

  if (string.IsNullOrEmpty(html))

  {

  return new List();

  }

  // 定义正则表达式用来匹配 img 标签

  Regex regImg = new Regex(@"]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*

  (?[^\s\t\r\n""']*)[^]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);

  // 搜索匹配的字符串

  MatchCollection matches = regImg.Matches(html);

  List sUrlList = new List();

  // 取得匹配项列表

  foreach (Match match in matches)

  sUrlList.Add(match.Groups["imgUrl"].Value);

  return sUrlList;

  }

  用正则表达式筛选HTML中所有link

  public static List GetLinks(string url)

  {

  string html = HttpHelper.HtmlCode(url);

  if (string.IsNullOrEmpty(html))

  {

  return new List();

  }

  //匹配http链接

  const string pattern2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";

  Regex r2 = new Regex(pattern2, RegexOptions.IgnoreCase);

  //获得匹配结果

  MatchCollection m2 = r2.Matches(html);

  List links = new List();

  foreach (Match url2 in m2)

  {

  if (StringHelper.CheckUrlIsLegal(url2.ToString()) || !StringHelper.IsPureUrl(url2.ToString())

  || links.Contains(url2.ToString()))

  continue;

  links.Add(url2.ToString());

  }

  //匹配href里面的链接

  const string pattern = @"(?i)]*?href=(['""]?)(?!javascript|__doPostBack)

  (?[^'""\s*#]+)[^>]*>";

  Regex r = new Regex(pattern, RegexOptions.IgnoreCase);

  //获得匹配结果

  MatchCollection m = r.Matches(html);

  // List links = new List();

  foreach (Match url1 in m)

  {

  string href1 = url1.Groups["url"].Value;

  if (!href1.Contains("http"))

  {

  href1 = Global.WebUrl + href1;

  }

  if (!StringHelper.IsPureUrl(href1) || links.Contains(href1)) continue;

  links.Add(href1);

  }

  return links;

  }

  开始收集图片

  /// 收集图片

  private void DownLoading()

  {

  if (LoadingUrls.Count

  {

  TextResultChange("-----------下载完毕,正在重新收集链接 \r\n");

  CollectionUrls();

  }

  else

  {

  //继续下载

  //Tdown.Start();

  StartDownLoad();

  }

  }

  收集链接

  /// 开始爬行网页

  private void CollectionUrls()

  {

  if (NconnUrls.Count > 0)

  {

  try

  {

  string url = NconnUrls.FirstOrDefault();

  //加入链接已采集存档

  UsedConnUrls.Add(url);

  //获取该链接的所有URL

  List urlList = HttpHelper.GetLinks(url);

  foreach (string url1 in urlList)

  {

  //如果没采集过链接

  if (!UsedConnUrls.Contains(url1))

  {

  NconnUrls.Add(url1);

  }

  //如果没采集过图片

  if (!UsedUrls.Contains(url1))

  {

  LoadingUrls.Add(url1);

  }

  }

  //删除已使用

  NconnUrls.RemoveAt(0);

  }

  catch (Exception)

  {

  }

  DownLoading();

  }

  else

  {

  TextResultChange("-----------任务结束,全部爬行完毕 \r\n");

  }

  }

  下载图片,这边下载图片有个最多任务条数限制,我限制的是200条。如果超过的话线程等待5秒,这里下载图片是异步调用的委托

  /// 下载中

  ///

  private void StartDownLoad()

  {

  //是否超过最大的队列

  if (_downingPicCount

  {

  List imgurls = HttpHelper.GetHtmlImageUrlList(LoadingUrls.FirstOrDefault());

  UsedUrls.Add(LoadingUrls.FirstOrDefault());

  LoadingUrls.RemoveAt(0);

  foreach (string url in imgurls)

  {

  if (!UsedImgUrls.Contains(url))

  {

  //创建异步下载

  DownloadHelper helper = new DownloadHelper();

  StopTimeHandler stop = new StopTimeHandler(helper.DowloadImg);

  AsyncCallback callback = new AsyncCallback(onDownLoadFinish);

  IAsyncResult asyncResult = stop.BeginInvoke(url, callback, "--下载完成 \r\n");

  //链接载入已使用

  UsedImgUrls.Add(url);

  TipStartDownLoad();

  }

  }

  imgurls.Clear();

  TextUrlChange("");

  }

  else

  {

  Thread.Sleep(5000);

  TextResultChange("-----------任务过多,搜集程序休眠5秒 \r\n");

  }

  DownLoading();


最新资讯

推荐阅读

  1. 17

    2019-10

    动态ip拨号VPS的AB段是什么意思?

    动态ip拨号VPS的AB段是什么意思?随着互联网需求的增加,很多公司和个人都在使用动态拨号VPS,但是有些用户看到拨号vps介绍里面ip段标的几A段、几AB段,却不懂其含义,IPV4协议里面一个完整的ip

  2. 02

    2019-12

    动态代理ip有哪些特点?

    动态代理ip有哪些特点?现如今大家每天都会接触网络,以及接触和网络相关的事情,所以,大家对于 ip地址 的认识还是比较多的,那我们现在能够了解到的ip地址,它分为 静态ip 和 动态ip 这二

  3. 11

    2019-07

    换IP地址可以用虚拟ip吗

    换IP地址可以用虚拟ip吗?找个可用的IP换,好麻烦,要验证很多个IP才能找到个能用的,实在是麻烦多了,能不能简单些呢?有没有虚拟的IP使用,不需要使用很久的。就是一个未分配给真实主

  4. 23

    2019-07

    代理ip的类型是什么

    代理ip​的类型是什么?代理IP的类型,具体是指代理IP协议类型,常见的有HTTP代理、HTTPS代理、Socks5代理等。HTTP代理,全称超文本传输协议(HyperText Transfer Protocol),是互联网数据传输的一种协

  5. 28

    2019-07

    什么软件能修改切换IP地址

    在日常生活中我们怎么去修改代理自己电脑和手机的网络IP地址,IP地址是每个联网设备的IP,根据这个IP可以进行网络数据传输,实现上网功能,有些业务及工作需要,要改变下自己的IP地址,

  6. 15

    2019-02

    用代理换IP后,还能查到我的地址吗

    使用代理是可以更换上网的IP地址,访问的服务器可以只记录代理IP地址,不能看到我使用的IP地址,这样别人还能查到我的地址吗?