实现调用微博内容的Java程序如下:(注意注释)为保护隐私运行结果就不贴出来了。
七星关区网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
import java.io.BufferedWriter;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;
import weibo4j.Timeline;
import weibo4j.model.Status;
import weibo4j.model.StatusWapper;
import weibo4j.model.WeiboException;
public class F { public static void main(String[] args) {
String userID="";//这里由于保护隐私请自己填写userID
String token="";//这里由于保护隐私请自己填写token
Timeline t=new Timeline();
t.client.setToken(token);
StatusWapper sw=null;
ListStatus status=null;
BufferedWriter bw=null;
try{
sw=t.getUserTimelineByUid(userID);
status=sw.getStatuses();
bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\status.txt"),"gbk"));
IteratorStatus iterator=status.iterator();
Status s=null;
while(iterator.hasNext()){
s=(Status)iterator.next();
bw.write(s.toString());//这里如果只需要微博内容可以bw.write(s.getText());
bw.newLine();
bw.flush();
}
}catch(WeiboException e){
e.printStackTrace();
System.out.println(e);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
获取当前登录用户及其所关注用户的最新微博的Java程序如下:(注意注释)为保护隐私运行结果就不贴出来了。
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;
import weibo4j.Timeline;
import weibo4j.model.Status;
import weibo4j.model.StatusWapper;
import weibo4j.model.WeiboException;
public class E {
public static void main(String[] args) {
String userID="";//这里由于保护隐私请自己填写userID
String token="";//这里由于保护隐私请自己填写token
Timeline t=new Timeline();
t.client.setToken(token);
StatusWapper sw=null;
ListStatus status=null;
BufferedWriter bw=null;
try{
sw=t.getFriendsTimeline();
status=sw.getStatuses();
bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\friends_status.txt"),"gbk"));
IteratorStatus iterator=status.iterator();
Status s=null;
while(iterator.hasNext()){
s=(Status)iterator.next();
bw.write(s.toString());//这里如果只需要微博内容可以bw.write(s.getText());
bw.newLine();
bw.flush();
}
}catch(WeiboException e){
e.printStackTrace();
System.out.println(e);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
开门见山,说两个工具可以实现你的要求,分笔试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的例子也很多,百度一下试试。
① 将长网址用md5算法生成32位签名串,分为4段,,每段8个字符;
② 对这4段循环处理,取每段的8个字符, 将他看成16进制字符串与0x3fffffff(30位1)的位与操作,超过30位的忽略处理;
③ 将每段得到的这30位又分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
④ 这样一个md5字符串可以获得4个6位串,取里面的任意一个就可作为这个长url的短url地址。
很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。
package jsoupTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
public class JsoupTest {
public static void main(String[] args) throws IOException {
MapString, String map = new HashMap();
//map.put请根据自己的微博cookie得到
Response res = Jsoup.connect("别人的主页id")
.cookies(map).method(Method.GET).execute();
String s = res.body();
System.out.println(s);
String[] ss = s.split("scriptFM.view");
int i = 0;
// pl_content_homeFeed
// pl.content.homeFeed.index
ListString list = new ArrayList();
for (String x : ss) {
// System.out.println(i++ + "======================================");
// System.out.println(x.substring(0,
// x.length() 200 ? 200 : x.length()));
// System.out.println("===========================================");
if (x.contains("\"html\":\"")) {
String value = getHtml(x);
list.add(value);
System.out.println(value);
}
}
// content=ss[8].split("\"html\":\"")[1].replaceAll("(\\\\t|\\\\n)",
// "").replaceAll("\\\\\"", "\"").replaceAll("\\\\/", "/");
// content=content.substring(0,
// content.length()=13?content.length():content.length()-13);
// System.out.println(Native2AsciiUtils.ascii2Native(content));
}
public static String getHtml(String s) {
String content = s.split("\"html\":\"")[1]
.replaceAll("(\\\\t|\\\\n)", "").replaceAll("\\\\\"", "\"")
.replaceAll("\\\\/", "/");
content = content.substring(0,
content.length() = 13 ? content.length()
: content.length() - 13);
return Native2AsciiUtils.ascii2Native(content);
}