您现在的位置是:首页 > 数码 > 

酷安java

2025-07-27 19:56:22
酷安java 爬虫思路 以酷安网用户粉丝较多的用户的个人中心为进口,获取该用户的全部粉丝的个人中心链接,用户头像链接和用户名,并分别放入队列。开启两个线程获取信息,一个线程获取队列中的用户的信息并放入队列,另一个线程负责从头像链接队列中取出链接并下载用户头像。 爬虫分析 用浏览器打开一个用户的粉丝列表(/[用户id]/con

酷安java

爬虫思路

以酷安网用户粉丝较多的用户的个人中心为进口,获取该用户的全部粉丝的个人中心链接,用户头像链接和用户名,并分别放入队列。开启两个线程获取信息,一个线程获取队列中的用户的信息并放入队列,另一个线程负责从头像链接队列中取出链接并下载用户头像。

爬虫分析

用浏览器打开一个用户的粉丝列表(/[用户id]/contacts)

并查看源码

我们可以看到粉丝列表以HTML的ul标签显示,并且其id为dataList,ul标签中的各个li标签即为每一个用户的信息啦~再进一步分析,li标签中的img标签为用户头像。h4标签的内容即为用户名,h4标签中的a标签的href属性为用户的个人中心链接。

通过观察我们还知道:用户的粉丝列表链接=个人中心链接 /contacts

这样我们就可以开始爬取头像了

用到的库

Jsoup:

HttpClient:

代码

Main.java

package main;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import org.apache.CloseableHttpRespe;

import org.apache.HttpGet;

import org.apache.http.CloseableHttpClient;

import org.apache.http.HttpClients;

import org.jsoup.Connection;

import org.jsoup.Jsoup;

import org.Document;

import org.Element;

public class Main {

//浏览器UA

private static String UA=Mozilla/5.0 (Windows T 10.0; WOW64) AppleWebKit/57.6 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/57.6;

//主机地址

private static final String HOST=;

//头像本地保存地址

private static final String SAVE_PAYH=D:/coolapk/;

//指示UserThread是否在运行

private static boolean isRun=false;

//用户中心界面队列

private static MyQueue userUrlQueue=new MyQueue<>();

//用户头像链接队列

private static MyQueue userHeadUrlQueue=new MyQueue<>();

//用户名队列

private static MyQueue userameQueue=new MyQueue<>();

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

userUrlQueue.put();

java.io.File f=new java.io.File(SAVE_PAYH);

//如果文件夹不存在,则创建

if(!())

{

();

}

start();

}

/**

* 开始

*/

private static void start()

{

new UserThread().start();

new HeadThread().start();

}

/**

* 获取相关的链接

* @throws Exception

*/

private static void getUserUrl() throws Exception {

String url=userUrlQueue.poll();

if(url!=null){

isRun=true;

Connection connection=(url);

connection.userAgent(UA);

Document document=connection.get();

Element ulElement=document.getElementById(dataList);

org.jsoup.select.Elements liElements=ulElement.getElementsByTag(li);

if (liElements==null) {

return;

}

for(Element li:liElements){

if(li==null)

continue;

//获取用户头像链接

String userHeadUrl=li.getElementsByTag(img).first().attr(src);

//获取一个用户的粉丝列表的url

String userUrl=HOSTli.getElementsByTag(h4).first()

.getElementsByTag(a).first()

.attr(href)/contacts;

//获取一个用户的用户名

String userame=li.getElementsByTag(h4).first()

.getElementsByTag(a).first().text();

//本地已保存就不再加入队列

if(!new File(SAVE_PAYHuserame.jpg).exists()){

userUrlQueue.put(userUrl);

userHeadUrlQueue.put(userHeadUrl);

userameQueue.put(userame);

}

}

//队列空了,isRun=false

isRun=false;

}

}

/**

* 获取图片并保存到本地

* @param imgUrl

* @param localPath

* @throws Exception

*/

private static void getImage(String imgUrl,String localPath) throws Exception {

//println(imgUrl);

CloseableHttpClient httpclient = ();

HttpGet httpget= new HttpGet(imgUrl);

CloseableHttpRespe resp=(httpget);

InputStream inputStream=resp.getEntity().getContent();

FileOutputStream fileOutputStream=new FileOutputStream(localPath);

byte[] buf=new byte[1024];

int len=0;

while ((len=inputStream.read(buf))!=-1) {

fileOutputStream.write(buf, 0, len);

fileOutputStream.flush();

}

();

();

}

/**

* 获取链接线程

* @author zyw

*

*/

public static class UserThread extends Thread{

@Override

public void run() {

// TODO Auto-generated method stub

//如果队列userUrlQueue不为空

while (!userUrlQueue.isEmpty()) {

try {

getUserUrl();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

/**

* 获取头像线程

* @author zyw

*

*/

public static class HeadThread extends Thread{

@Override

public void run() {

// TODO Auto-generated method stub

//如果队列userHeadUrlQueue不为空,并且UserThread在工作

while (!userHeadUrlQueue.isEmpty()||isRun) {

try {

String imgUrl=userHeadUrlQueue.poll();

String userame=userameQueue.poll();

getImage(imgUrl, SAVE_PAYHuserame.jpg);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

MyQueue.java

package main;

import java.util.LinkedList;

import java.util.Queue;

/**

* 线程安全队列

* @author zyw

*

* @param

*/

public class MyQueue {

private LinkedList userUrlQueue=new LinkedList();

private Object lock=new Object();

/**

* 获取队列是否为空

* @return

*/

public boolean isEmpty() {

return userUrlQueue.isEmpty();

}

/**

* 将一个元素插入队列尾

* @param t

*/

public void put(T t) {

synchronized (lock) {

userUrlQueue.addLast(t);

}

}

/**

* 队列头取出一个元素

* @return

*/

public T poll() {

T t=null;

synchronized (lock) {

t=(T) userUrlQueue.removeFirst();

}

return t;

}

}

效果图

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/707587.html

相关标签:无
上传时间: 2023-11-21 23:49:31

上一篇:美通社企业新闻汇总

下一篇:V

留言与评论(共有 11 条评论)
本站网友 胸骨
14分钟前 发表
/coolapk/; //指示UserThread是否在运行 private static boolean isRun=false; //用户中心界面队列 private static MyQueue userUrlQueue=new MyQueue<>(); //用户头像链接队列 private static MyQueue userHeadUrlQueue=new MyQueue<>(); //用户名队列 private static MyQueue userameQueue=new MyQueue<>(); public static void main(String[] args) throws Exception { // TODO Auto-generated method stub userUrlQueue.put(); java.io.File f=new java.io.File(SAVE_PAYH); //如果文件夹不存在,则创建 if(!()) { (); } start(); } /** * 开始 */ private static void start() { new UserThread().start(); new HeadThread().start(); } /** * 获取相关的链接 * @throws Exception */ private static void getUserUrl() throws Exception { String url=userUrlQueue.poll(); if(url!=null){ isRun=true; Connection connection=(url); connection.userAgent(UA); Document document=connection.get(); Element ulElement=document.getElementById(dataList); org.jsoup.select.Elements liElements=ulElement.getElementsByTag(li); if (liElements==null) { return; } for(Element li
本站网友 森远
22分钟前 发表
通过观察我们还知道:用户的粉丝列表链接=个人中心链接 /contacts 这样我们就可以开始爬取头像了 用到的库 Jsoup: HttpClient: 代码 Main.java package main; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.CloseableHttpRespe; import org.apache.HttpGet; import org.apache.http.CloseableHttpClient; import org.apache.http.HttpClients; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.Document; import org.Element; public class Main { //浏览器UA private static String UA=Mozilla/5.0 (Windows T 10.0; WOW64) AppleWebKit/57.6 (KHTML
本站网友 港湾酒店
1分钟前 发表
like Gecko) Chrome/56.0.2924.87 Safari/57.6; //主机地址 private static final String HOST=; //头像本地保存地址 private static final String SAVE_PAYH=D
本站网友 亚健康的概念
20分钟前 发表
酷安java 爬虫思路 以酷安网用户粉丝较多的用户的个人中心为进口,获取该用户的全部粉丝的个人中心链接,用户头像链接和用户名,并分别放入队列
本站网友 网上农博会
3分钟前 发表
SAVE_PAYHuserame.jpg); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } MyQueue.java package main; import java.util.LinkedList; import java.util.Queue; /** * 线程安全队列 * @author zyw * * @param */ public class MyQueue { private LinkedList userUrlQueue=new LinkedList(); private Object lock=new Object(); /** * 获取队列是否为空 * @return */ public boolean isEmpty() { return userUrlQueue.isEmpty(); } /** * 将一个元素插入队列尾 * @param t */ public void put(T t) { synchronized (lock) { userUrlQueue.addLast(t); } } /** * 队列头取出一个元素 * @return */ public T poll() { T t=null; synchronized (lock) { t=(T) userUrlQueue.removeFirst(); } return t; } } 效果图
本站网友 viewnx2
2分钟前 发表
like Gecko) Chrome/56.0.2924.87 Safari/57.6; //主机地址 private static final String HOST=; //头像本地保存地址 private static final String SAVE_PAYH=D
本站网友 昂达vi40
20分钟前 发表
h4标签的内容即为用户名,h4标签中的a标签的href属性为用户的个人中心链接
本站网友 重庆包皮医院
5分钟前 发表
h4标签的内容即为用户名,h4标签中的a标签的href属性为用户的个人中心链接
本站网友 不如这样
19分钟前 发表
酷安java 爬虫思路 以酷安网用户粉丝较多的用户的个人中心为进口,获取该用户的全部粉丝的个人中心链接,用户头像链接和用户名,并分别放入队列
本站网友 小米手机降价
7分钟前 发表
通过观察我们还知道:用户的粉丝列表链接=个人中心链接 /contacts 这样我们就可以开始爬取头像了 用到的库 Jsoup: HttpClient: 代码 Main.java package main; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.CloseableHttpRespe; import org.apache.HttpGet; import org.apache.http.CloseableHttpClient; import org.apache.http.HttpClients; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.Document; import org.Element; public class Main { //浏览器UA private static String UA=Mozilla/5.0 (Windows T 10.0; WOW64) AppleWebKit/57.6 (KHTML