网络爬虫之JSOUP

JSOUP中文文档:http://www.open-open.com/jsoup/
推荐博客:http://www.cnblogs.com/jycboy/p/jsoupdoc.html

从一个URL加载一个Document

Document doc = Jsoup.connect("http://example.com")
  .data("query", "Java")
  .userAgent("Mozilla")
  .cookie("auth", "token")
  .timeout(3000)
  .post();

使用DOM方法来遍历一个文档

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
    String linkHref = link.attr("href");
    String linkText = link.text();
} 


查找元素

getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods

元素数据

attr(String key)获取属性attr(String key, String value)设置属性
attributes()获取所有属性
id(), className() and classNames()
text()获取文本内容text(String value) 设置文本内容
html()获取元素内HTMLhtml(String value)设置元素内的HTML内容


使用选择器语法来查找元素

Elements links = doc.select("a[href]"); //带有href属性的a元素
Elements pngs = doc.select("img[src$=.png]");//扩展名为.png的图片
Element masthead = doc.select("div.masthead").first(); //class等于masthead的div标签
Elements resultLinks = doc.select("h3.r > a"); //在h3元素之后的a元素

如何找到优酷网视频的URL的连接地址?
视频的下面 有“ 分享 ”或 “站外引用 ”或是 贴到博客或BBS ,如果有点下,然后复制FALSH地址,在空间里写日志,点插入flash选项,加入flash的地址就可以了。
代码示例:
功能:使用JSoup爬取连接地址

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class OnlineProductDownload {

	public void demo1() {
		// 从优酷下载包含视频结果的html
		Document doc = getHtmlByName("冷然之天秤");
		try {
			//选择第一个结果
			Element element = doc.select("div.s_inform").first();
			// 获取播放源,不是优酷本站的返回(优酷可能会跳转到其他网站,如:爱奇艺)
			Element playSource = element.select("div.pos_area span").first();
			if (playSource.text() != "优酷") {
				return;
			}

			//每个li一集(海贼王:第一集、第二集)
			Elements li_Elements = element.select("ul.clearfix li");
			for (Element li : li_Elements) {
				// 获取第几集
				Element span = li.getElementsByTag("span").first();
				String text = span.text();
				// 获取每集详情的url(并不是视频的真实url)
				Element a = li.getElementsByTag("a").first();
				String href = a.attr("href");

				// 根据href获取详情网页文本
				doc = getHtmlTextByUrl(href);
				//查找实际结果标签
				Element sourceLi = doc.select("ul.fn-share-code li").first();
				// 根据doc获取播放插件. 如:
				// <iframe src='http://player.youku.com/embed/XMzUwNjM1OTA0MA=='></iframe>
				Element input = sourceLi.getElementsByTag("input").first();
				String value = input.attr("value");
				System.out.println(text + value);
			}
			// http://v.youku.com/v_show/id_XMzUwNjM1OTA0MA==.html
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 功能:使用优酷的搜库来搜索视频,并根据名称获取网页文本 如:海贼王
	public Document getHtmlByName(String name) {
		if (name.isEmpty() || name.length() <= 0) {
			return null;
		}
		// 拼接URL 优酷搜索形式:http://www.soku.com/search_video/q_海贼王
		String url = "http://www.soku.com/search_video/q_";
		try {
			//url编码:%E6%B5%B7%E8%B4%BC%E7%8E%8B=海贼王
			String encodeStr = URLEncoder.encode(name, "utf-8");
			url = url + encodeStr;
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		// 通过url获取html
		try {
			Document doc = Jsoup.connect(url).get();
			return doc;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 根据url从网络获取网页文本
	public Document getHtmlTextByUrl(String url) {
		Document doc = null;
		try {
			//拼接成完整的路径
			String str = "http:";
			str = str + url;
			doc = Jsoup.connect(str).get();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return doc;
	}

}

  

转载于:https://www.cnblogs.com/zhumengke/p/8858147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用Java编写网络爬虫,我们可以使用Jsoup库来进行HTML解析和数据抓取。 首先,您需要在项目中引入Jsoup库。您可以在Maven或Gradle构建工具中添加以下依赖项: Maven: ```xml <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency> ``` Gradle: ```groovy implementation 'org.jsoup:jsoup:1.13.1' ``` 接下来,您可以使用Jsoup来获取和解析网页内容。以下是一个简单的示例代码,演示如何使用Jsoup爬取网页并提取所需的数据: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class WebCrawler { public static void main(String[] args) { try { // 使用Jsoup连接到目标网页 Document document = Jsoup.connect("http://example.com").get(); // 使用CSS选择器提取所需的元素 Elements links = document.select("a[href]"); // 遍历并打印提取到的元素 for (Element link : links) { System.out.println("Link: " + link.attr("href")); System.out.println("Text: " + link.text()); } } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们使用`Jsoup.connect()`方法连接到目标网页,并使用`document.select()`方法使用CSS选择器提取所有带有`href`属性的链接元素。然后,我们遍历这些链接元素,并打印出链接的URL和文本。 您可以根据自己的需求进一步扩展和修改代码来满足特定的爬虫需求。请注意,在编写爬虫时,请遵守相关网站的使用条款和政策,以避免违反规定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值