吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4964|回复: 1
收起左侧

[会员申请] 申请会员ID:championzhang

[复制链接]
吾爱游客  发表于 2019-10-22 11:19
1、申 请 I D:championzhang
2、个人邮箱:565968679@qq.com
3、原创技术文章:.net/c#网路爬虫优化
本人是一个大二计算机专业的菜鸟,最近学习了用c#爬虫,觉得有很多代码优化的并不是很好,所以就总结几点分享一下,希望可以给予通过
1.网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
2.网络爬虫优化可以分两个阶段:1:在抓取数据的时候进行优化;
2:对抓取结果的处理进行优化;
今天,我只讲在抓取过程中的优化

抓取过程中的优化,我自己总结过几点:
1:可以在物理地址上进行优化,例如:目标资源服务器是上海的腾讯云主机,我们尽可能的选择同地域的服务器,也就是上海地域的服务器,不要去选择北京、青岛等等地域的服务器,也尽量选择同idc机房的服务器,我们知道此资源网站是用的腾讯云的服务器,我们尽可能的把爬虫放在腾讯云服务器上面,而不要放在阿里云服务器上面!
2:选择稳定、快速的网络,一般爬虫对网络质量要求较高,尽量不要使用家庭网络,选择公司网络或则购买服务器进行抓取数据。
3:选择比较高效的爬虫语言,听说python在爬虫方面比较擅长,但是,我没有用过,以后再做测试,今天,我主要是以.net语言来讲解。

135507voo433hv4s8o6686.jpg
3.为什么第三方插件(包)耗时最长?第三方插件其实是对原生代码的大量封装,大量逻辑判断,通用性比较强,可能会导致抓取速度很慢。下面是原生代码:
        /// <summary>
        /// 原生代码
        /// </summary>
        /// <param name="url"></param>
        /// <param name="useragent"></param>
        /// <returns></returns>
        public static string GetHtml(string url, string useragent)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.UserAgent = useragent;
                request.Timeout = 10000;
                request.AllowAutoRedirect = false;
                //对发送的数据不使用缓存
                request.AllowWriteStreamBuffering = false;
                string sHTML = string.Empty;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream myResponseStream = response.GetResponseStream())
                    {
                        StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                        sHTML = myStreamReader.ReadToEnd();
                    }
                }
                return sHTML;
            }
            catch (Exception ex)
            {
                return null;
            }
        }


原生代码就上面几行,平均耗时还是184毫秒,越简单的代码越难优化,大家感觉上面的代码如何再优化才能达到平均耗时99毫秒?速度相差一倍!



优化的秘密“gzip”,如果,目标资源服务器支持gzip压缩的情况下,我们在访问网站的时候,浏览器请求网站的时候,请求头会带有下面的参数:
如下图:

截图

截图



通俗点讲:

客户端说:我支持“gzip, deflate, sdch, br”压缩算法,你返回数据的时候,随便用那种都可以。

服务端说:我正好支持gzip压缩算法,那我就用gzip算法,把数据压缩传给你

客户端说:好的,那我把收到的数据用gzip算法解密

gzip算法,可以对传输数据进行压缩,大大减少了传输的内容,所以,请求效率会提高,所以,优化后的代码如下:




/// <summary>
        /// 优化后的代码
        /// </summary>
        /// <param name="url"></param>
        /// <param name="useragent"></param>
        /// <returns></returns>
        public static string GetHtml2(string url, string useragent)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.UserAgent = useragent;
                request.Timeout = 10000;
                request.Headers.Add("Accept-Encoding", "gzip");
                request.AllowAutoRedirect = false;
                //对发送的数据不使用缓存
                request.AllowWriteStreamBuffering = false;
                string sHTML = string.Empty;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
                    {
                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            sHTML = reader.ReadToEnd();
                        }
                    }
                }
                return sHTML;
            }
            catch (Exception ex)
            {
                return null;
            }
        }


虽然是很小的细节,但是效率可谓提高了一倍!相当于,你两天采集的数据,现在1天可以采集完,此文,献给学习爬虫的朋友们。

注意:gzip压缩算法和编程语言无关!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2019-10-22 17:16
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表