使用HttpClient 、Jsoup的爬虫获取指定网页内容以及下载图片

HttpClient:读取指定URL网页内容 ;

Jsoup:解析所要的页面数据;

public static String getHtmlByUrl(String id) {
		if (id != null && !id.equals("")) {
			String html = null;
			String userAgent = "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36";
			String url = "https://movie.douban.com/celebrity/" + id + "/";
			HttpClient httpClient = new DefaultHttpClient();
			try {
				Thread.sleep(4000);
				HttpGet httpget = new HttpGet(url);
				httpget.setHeader("User-Agent",userAgent);
				HttpResponse responce = httpClient.execute(httpget);
				int resStatu = responce.getStatusLine().getStatusCode();
				if (resStatu == HttpStatus.SC_OK) {
					HttpEntity entity = responce.getEntity();
					if (entity != null) {
					html = EntityUtils.toString(entity);
							Document document = Jsoup.parse(html);
						Element wapElement = document.getElementById("wrapper");
						Element contentElement = wapElement.getElementById("content");
						String imgSrc = contentElement.getElementById("headline").select("a").attr("href");
						Log.d(TAG, "getHtmlByUrl: "+imgSrc);
						return imgSrc;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				httpClient.getConnectionManager().shutdown();
			}

		}
		return null;
	}

解析豆瓣网页并获取电影海报下载并存到指定目录

public String setImage(String path, String imageName) {
		try {
			// 把传过来的路径转成URL
			URL url = new URL(path);
			// 获取连接
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			// 使用GET方法访问网络
			connection.setRequestMethod("GET");
			// 超时时间为10秒
			connection.setConnectTimeout(10000);
			if (connection.getResponseCode() == 200) {
				InputStream inputStream = connection.getInputStream();
				// 使用工厂把网络的输入流生产Bitmap
				Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
				String imgePath = saveImageDish(bitmap, imageName);
				inputStream.close();
				return imgePath;
			} else if (connection.getResponseCode() == 429) {
				Thread.sleep(1000);
				setImage(path, imageName);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}
// 将图片保存到本地
	private String saveImageDish(Bitmap bitmap, String imageName) {
		try {
			File files = new File(SystemState.MovieImagePath);
			if (!files.exists()) {
				files.mkdir();
			}
			File file = new File(files, imageName + ".jpg");
			FileOutputStream objct = new FileOutputStream(file);
			bitmap.compress(Bitmap.CompressFormat.JPEG, 100, objct);
			objct.close();
			return StringUtil.MOVIE_IMAGE + file.getName();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

使用Java编写基于HttpClientJsoup爬虫,需要进行以下步骤: 1. 首先,导入HttpClientJsoup的依赖包。可以使用maven或gradle进行依赖管理。 2. 创建一个HttpClient实例,用于发送HTTP请求和接收响应。可以使用HttpClients.createDefault()方法创建一个默认配置的实例。 3. 创建一个HttpGet实例,设置请求URL和请求头信息。可以使用new HttpGet(url)方法创建一个HttpGet实例,然后使用setHeader()方法设置请求头信息。 4. 发送HTTP请求,并获取响应结果。可以使用HttpClient.execute()方法发送请求,并使用HttpResponse.getEntity()方法获取响应实体。 5. 解析HTML内容。可以使用Jsoup.parse()方法解析HTML内容,然后使用Jsoup提供的API进行内容提取和处理。 以下是一个使用HttpClientJsoup进行网页爬取的示例代码: ```java import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; public class WebCrawler { public static void main(String[] args) throws IOException { // 创建一个HttpClient实例 HttpClient httpClient = HttpClients.createDefault(); // 创建一个HttpGet实例,设置请求URL和请求头信息 HttpGet httpGet = new HttpGet("https://www.example.com"); httpGet.setHeader("User-Agent", "Mozilla/5.0"); // 发送HTTP请求,并获取响应结果 HttpResponse httpResponse = httpClient.execute(httpGet); String html = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); // 解析HTML内容 Document document = Jsoup.parse(html); String title = document.title(); System.out.println("Title: " + title); } } ``` 在这个示例中,我们使用HttpClient发送了一个GET请求到https://www.example.com,并获取了响应结果。然后使用Jsoup解析HTML内容,并获取了网页的标题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值