注意: 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. 18

    2019-04

    IP地址修改器如何换IP

    现在的互联网趋势,越多越多的人需要使用动态IP,像爬虫采集、微信用户、网络营销、博客互动、SEO优化等等,都需要使用动态IP去隐藏自身的IP地址去操作,这个使用可以使用换IP软件。其实

  2. 22

    2019-02

    网站反爬虫和爬虫的应对方法

    网站反爬虫比较多,robots限制是最基本的,告诉爬虫们哪些是不可以爬取的。还有其他的限制,比如常见的有IP限制,验证码限制,还有User-Agent检测,JS脚本等等,不同的反爬虫可以起到不同的

  3. 28

    2019-05

    如何下载代理服务器

    如何下载代理服务器?要找出代理服务器其实就是要找出该服务器的IP地址、服务类型及所用端口。搭建一个私人代理一般分为几个步骤。1.申请虚拟主机,要选择合适的品牌和地区。因为国内

  4. 01

    2019-11

    如何设计和维护本地代理IP池?

    如何设计和维护本地代理IP池? 无论是爬取免费的代理IP,还是购买付费的代理IP,都可以尝试在本地设计一个IP代理池。这样既方便使用,又可以提升工作效率。想在本地设计一个代理IP池应该怎

  5. 11

    2020-03

    认识使用免费代理ip的隐患

    说白了,代理ip就是用来换ip。如果有换ip需求的,那么可以选择国内专业的代理ip来使用。

  6. 01

    2019-07

    代理IP怎么用

    代理IP如今这么火,代理IP究竟有何妙用?引得商家纷纷自建或者利用技术手段在公网上扫描收集代理IP。互联网发达的现今,我们迎来了许多便利,也被诸多的危险所包围,只是上网痕迹一条就