java相关。爬虫问题,关于新浪微博。谢谢! 50
目标是新浪微博的某用户的相册模块中的某个具体的相册里面的图片,比如头像相册。之前的网页都爬下来了。但是到了具体的相册里面,居然在源码中找不到任何一张图片的位置和地址。而且...
目标是新浪微博的某用户的相册模块中的某个具体的相册里面的图片,比如头像相册。之前的网页都爬下来了。但是到了具体的相册里面,居然在源码中找不到任何一张图片的位置和地址。
而且把源码复制到本地新建的html文件,双击打开,照片不显示。当且仅当从上级的相册名称那里点就去才显示,虽然源码一样。
请问,新浪相册是一种什么加载机制,该如何爬下图片?谢谢! 展开
而且把源码复制到本地新建的html文件,双击打开,照片不显示。当且仅当从上级的相册名称那里点就去才显示,虽然源码一样。
请问,新浪相册是一种什么加载机制,该如何爬下图片?谢谢! 展开
2014-08-16
展开全部
开门见山,说两个工具可以实现你的要求,分笔试selenium和htmlunit。当然还有其他工具,就不一一列举了。
首先你用jsoup或者apache的httpclient爬到你能够爬到的那一层,即可以通过response传回的html静态页面可以知道下一步爬哪个连接的那一层。
然后到爬不动的那一层,比如你说图片动态加载,抓回的html上找不到图片的链接了,那么你在使用上述两个工具其中一个。
大致思路我絮叨的如上。然后说一下二者的异同。
————————————————————————————————
这两个你选用一个就好,不过爬虫用htmlunit就可以了。这俩都是做页面测试方面很好用的工具,不同于其它的工具是他们可以模拟一个浏览器引擎,通过这句话我想你就应该知道你给他一个地址他就可以像浏览器那样解析,既然如此浏览器本身应该知道解析后的html啊,所以就可以拿到了。不同点是selenuim会弹出一个框,后者后台静默的为你奉献。当然,出发点不同,前者更善于肉眼可见的模拟,都很好用,简单爬虫推荐用后者。又絮叨了一堆,好了,你对这两个工具有个了解了。下面附上一个htmlunit的demo,你就可以用了。
————————————————————————————————
新浪微博需要登录,所以你需要模拟登录过程,并保持一个登录后的WebClient对象,然后用它来访问那些动态生成的网页。
WebClient webClient = new WebClient();
HtmlPage page1 = webClient.getPage(登录的url);
HtmlForm form = page1.getFormByName("myform");
HtmlSubmitInput button = form.getInputByName("submitbutton");
HtmlTextInput textField = form.getInputByName("userid");
textField.setValueAttribute("root");
HtmlPage page2 = button.click();
好了,你已经可以做了。这个工具一定可以帮你完成你的功能需求。htmlunit的例子也很多,百度一下试试。
首先你用jsoup或者apache的httpclient爬到你能够爬到的那一层,即可以通过response传回的html静态页面可以知道下一步爬哪个连接的那一层。
然后到爬不动的那一层,比如你说图片动态加载,抓回的html上找不到图片的链接了,那么你在使用上述两个工具其中一个。
大致思路我絮叨的如上。然后说一下二者的异同。
————————————————————————————————
这两个你选用一个就好,不过爬虫用htmlunit就可以了。这俩都是做页面测试方面很好用的工具,不同于其它的工具是他们可以模拟一个浏览器引擎,通过这句话我想你就应该知道你给他一个地址他就可以像浏览器那样解析,既然如此浏览器本身应该知道解析后的html啊,所以就可以拿到了。不同点是selenuim会弹出一个框,后者后台静默的为你奉献。当然,出发点不同,前者更善于肉眼可见的模拟,都很好用,简单爬虫推荐用后者。又絮叨了一堆,好了,你对这两个工具有个了解了。下面附上一个htmlunit的demo,你就可以用了。
————————————————————————————————
新浪微博需要登录,所以你需要模拟登录过程,并保持一个登录后的WebClient对象,然后用它来访问那些动态生成的网页。
WebClient webClient = new WebClient();
HtmlPage page1 = webClient.getPage(登录的url);
HtmlForm form = page1.getFormByName("myform");
HtmlSubmitInput button = form.getInputByName("submitbutton");
HtmlTextInput textField = form.getInputByName("userid");
textField.setValueAttribute("root");
HtmlPage page2 = button.click();
好了,你已经可以做了。这个工具一定可以帮你完成你的功能需求。htmlunit的例子也很多,百度一下试试。
展开全部
1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中
2.java中的类大致分为三种:
1.系统类
2.扩展类
3.由程序员自定义的类
3.类装载方式,有两种
1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
2.显式装载, 通过class.forname()等方法,显式加载需要的类
想必您肯定也上网查过,但是我想具体是什么机制,属于内部的机密了吧。毕竟网上查的到的话,那结果可想而知了。
2.java中的类大致分为三种:
1.系统类
2.扩展类
3.由程序员自定义的类
3.类装载方式,有两种
1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
2.显式装载, 通过class.forname()等方法,显式加载需要的类
想必您肯定也上网查过,但是我想具体是什么机制,属于内部的机密了吧。毕竟网上查的到的话,那结果可想而知了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你给那个不显示照片的链接看看..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询