首页 新闻 会员 周边 捐助

爬虫登录 最好是天猫爬虫登录 有经验的大神请赐教

0
悬赏园豆:50 [已解决问题] 解决于 2015-11-18 14:59

抓取页面需要登录后才能获取源代码。我该怎么跳过登录,直接获取登录后的页面的源代码啊? 谢谢^_^ ,如何获取到登录后页面的cookie

WYan13的主页 WYan13 | 初学一级 | 园豆:42
提问于:2015-11-04 13:58
< >
分享
最佳答案
0

抓取天猫店铺的关于页面一定次数后是需要登录,你可以考虑使用高匿代理IP不停切换的抓,我近段时间刚好也在做淘宝的爬虫,解决方式是selenium+高匿代理解决的。不过,效率一般般,2天就抓了20来W天猫店铺。

收获园豆:30
爱吃皮皮虾 | 初学一级 |园豆:54 | 2015-11-04 16:43

你抓店铺是根据什么来抓的?关键词还是什么?

WYan13 | 园豆:42 (初学一级) | 2015-11-07 10:09

@双子394: 将淘宝关键字搜索排行榜拿下来抓的。

爱吃皮皮虾 | 园豆:54 (初学一级) | 2015-11-07 21:14

@小码哥: 能私聊吗?请教下关于关键词库的建立。我是第一次做关于爬虫的技术。1024064279  这是我QQ

WYan13 | 园豆:42 (初学一级) | 2015-11-08 16:36
其他回答(9)
0

ATM机器里面有钱,我该怎么跳过登陆,直接拿到里面的钱呢?

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-11-04 15:02

砸了ATM

支持(0) 反对(0) jello chen | 园豆:7336 (大侠五级) | 2015-11-04 15:57

这个我前不久还真遇到过,准备取钱,结果里面有张卡,还能直接操作。吓的我把里面的卡给退出来送给地铁管理人员了。从此以后留下后遗症了,每次取完钱必须确认卡拿出来了没有。

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2015-11-04 16:00
0

买通开发的程序猿即可!!!

liuyuxin | 园豆:80 (初学一级) | 2015-11-04 15:08

这也没用,开发的是没权限看正式的数据的

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-11-04 15:47
0

你先把登录这部分做了,然后再做你后面想做的事,想绕过去? 你能想到的方法 阿里的人都想到了的

Zery | 园豆:6151 (大侠五级) | 2015-11-04 15:23

怎么模拟登录获取登录后的cookie呢?有没有例子啊

支持(0) 反对(0) WYan13 | 园豆:42 (初学一级) | 2015-11-04 15:58

@双子394: 

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


            request.Accept = "*/*";
            request.Method = "POST";
            request.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
            request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; //表单提交
            //request.Host = "www.cnblogs.com";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0";
            byte[] bytes = Encoding.UTF8.GetBytes(body);
            request.ContentLength = bytes.Length;
            request.GetRequestStream().Write(bytes, 0, bytes.Length);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            string html = reader.ReadToEnd();
            //取出cookie
            Cookie cookie = response.Cookies["UserName"];
            string userName = cookie.Value;
支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2015-11-04 16:05

@Zery: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  这个url是商品页的Url吗?

byte[] bytes = Encoding.UTF8.GetBytes(body);  body这个参数是什么格式?

 

Cookie cookie = response.Cookies["UserName"];  可以这么获取cookie?

支持(0) 反对(0) WYan13 | 园豆:42 (初学一级) | 2015-11-04 16:34

@双子394: 

body 那个是因为我是用post方式去请求的,只是我自己用的段代码也就给你个参考而以,

另外 Cookie的 取法你看看MSDN的写法 https://msdn.microsoft.com/zh-cn/library/dd920298(v=vs.95).aspx

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2015-11-04 16:50
0

如果可以绕过登录了,那就直接去读数据库了,还用得到爬虫??

刘宏玺 | 园豆:14020 (专家六级) | 2015-11-04 15:32
0

模拟一个http登录请求,获取response后的cookies,下次访问带上cookie即可。

收获园豆:15
Beyond-bit | 园豆:2885 (老鸟四级) | 2015-11-04 15:58

帮忙看看这个方法呗?第一次做模拟登录

byte[] loginByteArray = Encoding.UTF8.GetBytes(postData); // 转化

byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化

postData这个参数是什么格式啊?

支持(0) 反对(0) WYan13 | 园豆:42 (初学一级) | 2015-11-04 16:01
public String Post(string url, string postData)
        {
            try
            {
                #region 登录
                string loginurl = "http://10.16.230.26:8080/login.aspx?ReturnUrl=%2flogout.aspx";
                byte[] loginByteArray = Encoding.UTF8.GetBytes(postData); // 转化 
                CookieContainer myCookieContainer = new CookieContainer();
                //新建一个CookieContainer来存放Cookie集合 
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(loginurl);
                //新建一个HttpWebRequest 
                myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                myHttpWebRequest.ContentLength = loginByteArray.Length;
                myHttpWebRequest.Method = "POST";
                myHttpWebRequest.CookieContainer = myCookieContainer;
                //设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer 
                Stream myRequestStream = myHttpWebRequest.GetRequestStream();
                // Send the data. 
                myRequestStream.Write(loginByteArray, 0, loginByteArray.Length); //写入参数 
                myRequestStream.Close();
                //把数据写入HttpWebRequest的Request流 
                myRequestStream.Close();
                //关闭打开对象 
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                //新建一个HttpWebResponse 
                myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
                //获取一个包含url的Cookie集合的CookieCollection 
                Stream myResponseStream = myHttpWebResponse.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                //把数据从HttpWebResponse的Response流中读出 
                myStreamReader.Close();
                myResponseStream.Close();
                #endregion

                byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化 

                //拿到了Cookie,再进行请求就能直接读取到登录后的内容了 
                myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                myHttpWebRequest.Headers.Add("Accept-Language:   zh-cn");
                myHttpWebRequest.Headers.Add("UA-CPU:   x86");
                myHttpWebRequest.Headers.Add("Accept-Encoding:   gzip, deflate");
                myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  Embedded Web Browser from: http://bsalsa.com/; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
                myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                myHttpWebRequest.ContentLength = byteArray.Length;
                myHttpWebRequest.Method = "POST";
                myHttpWebRequest.CookieContainer = myCookieContainer;//* 
                //刚才那个CookieContainer已经存有了Cookie,把它附加到HttpWebRequest中则能直接通过验证 

                myRequestStream = myHttpWebRequest.GetRequestStream();
                // Send the data. 
                myRequestStream.Write(byteArray, 0, byteArray.Length); //写入参数 
                myRequestStream.Close();

                myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
                myResponseStream = myHttpWebResponse.GetResponseStream();
                myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                string outdata = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return String.Empty;
            }
        }

 

支持(0) 反对(0) WYan13 | 园豆:42 (初学一级) | 2015-11-04 16:02
0

你应该是要爬商品数据吧。直接爬网页上,不用登录

gw2010 | 园豆:1487 (小虾三级) | 2015-11-06 11:55
0

使用pyspider,模拟登陆,获取cookie

收获园豆:5
silianpan | 园豆:571 (小虾三级) | 2015-11-06 12:48
0

肯定必须是登陆后,才能搞得啊。

凝冰 | 园豆:685 (小虾三级) | 2015-11-18 10:58
0

试试神箭手云爬虫平台,有现成的天猫商品及评价采集爬虫[按搜索关键字]支持云端自动采集,试试监控更新~

爬虫链接:http://www.shenjianshou.cn/index.php?r=market/configDetail&pid=182

sosozzzx | 园豆:302 (菜鸟二级) | 2016-08-23 16:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册