`

抓取篮球球员图片-利用xpath匹配xml

    博客分类:
  • java
 
阅读更多
package com.hym.io;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;

public class GetNewBKPlayerPhoto {
	private final static String PLAYER_BET_ID_PATH = "E:\\work\\2014\\basketball\\20140116_photo\\PlayerBetId2.txt";
	private final static String PLAYER_XML_PATH = "E:\\work\\2014\\basketball\\20140116_photo\\LqPlayer_xml.xml";
	private final static String PLAYER_NO_PHOTO_PATH = "E:\\work\\2014\\basketball\\20140116_photo\\noPhoto3.txt";
	private final static String localPath = "E:\\work\\2014\\basketball\\20140116_photo\\bkPlayerPhoto3";

	public static void main(String[] args) {
		System.out.println("downloaded begin ...... ");
		GetNewBKPlayerPhoto getPhoto = new GetNewBKPlayerPhoto();
		List<String> noPhotoList = getPhoto.downLoadPhoto();
		try {
			FileUtils.writeLines(new File(PLAYER_NO_PHOTO_PATH), noPhotoList);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("downloaded end ...... ");
	}

	public List<String> getNewPlayerBetId() {
		try {
			//File file = new File(PLAYER_BET_ID_PATH);
			//List<String> betIds = FileUtils.readLines(file);
			List<String> betIds = new ArrayList<String>();
			for (int i = 3791; i<= 4013; i++) {
				betIds.add(String.valueOf(i));
			}
			return betIds;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	public Map<String, String> getBetIdPhotoMap() {
		List<String> playerBetIdList = getNewPlayerBetId();
		Map<String, String> betIdPhotoMap = new HashMap<String, String>();
		String xml;
		try {
			xml = FileUtils
					.readFileToString(new File(PLAYER_XML_PATH), "utf-8");
			Element root = getRoot(xml);
			for (String betId : playerBetIdList) {
				String photo = getNodeAttribute(root, "i", "Photo", "id", betId);
				betIdPhotoMap.put(betId, photo);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return betIdPhotoMap;
	}

	public List<String> downLoadPhoto() {
		List<String> noPhotoList = new ArrayList<String>();
		Map<String, String> betIdPhotoMap = getBetIdPhotoMap();
		if (betIdPhotoMap != null && !betIdPhotoMap.isEmpty()) {
			Set<String> keySet = betIdPhotoMap.keySet();
			Iterator<String> iter = keySet.iterator();
			while (iter.hasNext()) {
				String betId = iter.next();
				String photo = betIdPhotoMap.get(betId);
				if (StringUtils.isEmpty(photo) || photo.indexOf("no") > -1) {
					noPhotoList.add(betId);
					continue;
				}
				downBKPlayerPhoto(betId, photo);
				System.out.println("downloaded betId = " + betId + ", photo = " + photo);
			}
		}
		return noPhotoList;
	}

	private Element getRoot(String xml) {
		try {
			Document doc = DocumentHelper.parseText(xml);
			Element root = doc.getRootElement();
			return root;
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return null;
	}

	public String getNodeAttribute(Element root, String nodeName,
			String attrName, String key, String value) {
		List<Node> nodes = root.selectNodes("//" + nodeName + "[" + key + "='"
				+ value + "']");
		if (nodes == null || nodes.isEmpty()) {
			return null;
		}
		return nodes.get(0).valueOf(attrName);
	}

	public void downBKPlayerPhoto(String betId, String photo) {
		String webSite = "http://nba.xxx.com";
		// 一个一个下载照片,并写入本地
		String suffix = photo.substring(photo.lastIndexOf("."));
		URL url;
		try {
			url = new URL(webSite + photo);
			File file = new File(localPath + "\\" + betId + suffix);

			FileUtils.copyURLToFile(url, file);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

分享到:
评论

相关推荐

    perl-XML-XPath-1.42-3.el8.noarch(1).rpm

    官方离线安装包,亲测可用

    BIT-101 XPath Query Tool XML查询工具

    BIT-101 XPath Query Tool XML查询工具

    XML - 实验(3) -- XPath & XSLT

    《XML》实验任务书 【3】 XPath & XSLT [实验目的] 1、学习如何使用XMLSPY集成开发环境执行XPath查询、以及XSLT的数据转换。 2、理解XPath的类型系统和序列类型等相关概念,掌握XPath表达式语法和执行语义,能够...

    基于Xpath的xml文件查询和更新

    Xpath(XML Path Language)则是用来在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,如元素、属性、文本等。在本主题中,我们将深入探讨基于Xpath的XML文件查询和更新。 **Xpath基本概念** 1. *...

    javascript-xpath-latest.js

    1. 更换默认的xpath库 除了ie,其他主要浏览器都是内置对xpath的支持的,但ie不行,所以selenium 使用了javascript库,默认使用的是ajaxslt,这个会比较慢,可以换成 javascript-xpath, 虽然比firefox还是慢...

    xpath读取XML节点

    XPath是XML文档中查找信息的语言,它允许我们高效地定位到XML文档中的特定节点,如元素、属性或文本。在Java编程中,JDOM库是一个流行的解析和操作XML的工具,它提供了对XPath的支持,使得我们可以方便地通过XPath...

    JSTL-XML-Xpath

    在"JSTL-XML-Xpath"这个主题中,我们可以看到JSTL是如何集成XML处理和XPath查询的。JSTL的`&lt;c:import&gt;`和`&lt;x:parse&gt;`标签用于导入XML文档并将其解析为JDOM或DOM对象。接着,`&lt;x:path&gt;`标签可以用来执行XPath表达式,...

    Java中使用xpath获取xml中的数据

    本篇将深入探讨如何在Java中利用XPath来提取XML文档中的数据,以及相关的实现步骤和关键知识点。 首先,理解XPath的基本概念至关重要。XPath使用路径表达式来选取XML文档中的节点。这些路径表达式类似于文件系统中...

    perl-XML-XPath-1.13-22.el7.noarch.rpm

    离线安装包,亲测可用

    XML应用开发(软件品牌)-1期 5.3案例分析-使用XPath路径导航.doc

    2. `xpath-expression.xslt`案例演示了不同路径表达式的用法,如选取BookList的所有子节点、根元素、特定子元素、所有同名子元素、任意位置的后代元素以及特定属性。 代码实现中,`xsl:apply-templates`与`xsl:...

    wicked-good-xpath, 纯JS实现DOM级别 3 XPath规范.zip

    wicked-good-xpath, 纯JS实现DOM级别 3 XPath规范 很好的XPath Wicked XPath是谷歌编写的DOM级别 3 XPath规范的纯JavaScript实现。 它为每个浏览器中的HTML文档启用XPath评估。 我们相信它是JavaScript中最快的XPath...

    XMLDOM T-SQL XPath 正则表达式等CHM格式学习文档

    XMLDOM(XML Document Object Model)是微软开发的一种用于处理XML文档的API,它允许程序员通过JavaScript或其他编程语言在客户端或服务器端对XML数据进行读取、修改和操作。XMLDOM将XML文档转换为一个可遍历的对象...

    Xpath 解析xml文件转化为csv文件

    XPath是一种在XML文档中查找信息的语言,它是XML处理中的重要工具。XML(eXtensible Markup Language)是一种标记语言,常用于数据交换和存储。CSV(Comma Separated Values)文件则是一种简单、通用的数据格式,...

    PyPI 官网下载 | py_dom_xpath_six-0.2.4-py3-none-any.whl

    通过`select()`函数,你可以执行XPath查询,并返回匹配的元素列表。这样,你可以方便地遍历和操作XML文档的各个部分。 **总结** `py_dom_xpath_six`库结合了XPath和DOM的概念,为Python开发者提供了一个高效且易于...

    xpath解析xml

    在本篇文章中,我们将深入探讨如何利用XPath来解析XML文件,并且会提及如何通过XPath操作Map集合,从而避免过多地生成Java Bean类。 首先,理解XML文档的结构至关重要。XML是一种标记语言,用于存储数据,其结构...

    用XSLT和Xpath查询XML文档.doc

    XSLT基于XPath,通过模板匹配和样式规则,将源XML文档转换为目标格式。XSLT提供了控制流、变量、函数库等编程特性,使得XML数据的呈现和处理更具灵活性。 5. **XSLT与XPath的应用** - 数据检索:XPath用于在XML...

    从XML文件抽出XPath - C and C++

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被设计用来选取XML文档中的节点,如元素、属性、文本等。XPath使用路径表达式来选取节点,类似于我们在网页浏览器中输入URL来访问特定页面的方式...

    Dom4j结合XPath解析XML文件路径表达式

    本篇文章将深入探讨如何使用Dom4j,一个流行的Java库,结合XPath来解析XML文件中的路径表达式,同时阐述相对路径和绝对路径的匹配原则。 首先,我们要了解Dom4j库。Dom4j是一个灵活且高效的处理XML的Java库,它提供...

    Dom,Sax,Xpath解析XML实例

    在处理XML时,我们通常会使用三种主要的解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和XPath(XML Path Language)。下面将详细介绍这三种解析方法,并结合实例进行讲解。 1. DOM解析: DOM...

Global site tag (gtag.js) - Google Analytics