背景

和好友一起在口袋通上开了一个微店。以图书为例,需要往微店后台添加介绍数据,一般的做法是去京东或亚马逊这些网站找到同本图书,然后将其中的书名、作者、内容简介、目录等信息一条一条的复制、粘贴过来,甚是麻烦。

解决方法

如果能用Java程序去实现这一繁琐的手工过程就好了!说干就干,let's rock and roll.

首先介绍一下要用到的第三方类库Jsoup。Jsoup是一款开源的Java类库,用于解析静态HTML页面。静态,是指查看网页源代码,数据都是在网页标签里的,而不是由JavaScript动态操作页面或者网页二次请求加载进来的。

再说一下手工获取京东图书数据的步骤。1. 打开京东搜索框,输入书名,点击搜索按钮;2. 从结果也中选出对应的图书,点击;3.进入图书介绍页面,复制图书信息;

转化为程序,我们需要得到图书介绍页面的url,然后用Jsoup去解析页面中的标签,得到想要的数据。这个url从哪里得到?可以从搜索结果页面中得到的!那么我们就要先找出搜索结果页面,从中获取此url。我们知道,如果书名输入的比较准确,第一条搜索结果往往就是我们要搜索的图书,我们就用Jsoup解析第一条结果就ok了。而搜索结果页面如何获得呢?其实搜索结果页面就是一个url对应的页面,看浏览器的地址栏就知道了(如《陈寅恪的最后20年》的搜索结果页面对应的url就是"http://search.jd.com/Search?keyword=机动车驾驶员教材解读&enc=utf-8")。所以,我们可以拼接搜索结果页面的url,请求这个url就可以得到搜索结果页面。

整个过程串起来就是:首先,拼接搜索结果页面的url;其次,请求该url,获得搜索结果页面对应的Document对象;然后,解析搜索结果页面,获取第一条商品对应的url;最后,请求商品对应的url,获取商品介绍页面;最后,解析页面,得到想要的数据。

由于京东图书页面有多个模板,我在程序中只解析了如下图所示这种。

而下图这种模板,则没有解析。

程序代码

下面我们就上程序。新建Java工程后要引入Jsoup的jar包。

/*** @Title      : Spider.java* @Package    : com.fleamarket.main* @Description: * * @author : cmm* @date   : 2015-1-10 下午9:58:45* @version: V1.0*/package com.fleamarket.main;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;/*** @ClassName : Spider* @Description: TODO* @author : cmm* @date : 2015-1-10 下午9:58:45* */public class Spider {/*** @Title: main* @Description: TODO* @param @param args* @return void* @throws*/public static void main(String[] args) {String bookTitle = "机动车驾驶员教材解读";try {// 京东商品搜索框的urlString urlToSearch = "http://search.jd.com/Search?keyword=__TITLE__&enc=utf-8".replace("__TITLE__",URLEncoder.encode(bookTitle, "utf-8"));// 请求京东服务器进行搜索Connection con = Jsoup.connect(urlToSearch).userAgent(GlobalConfig.USER_AGENT).timeout(10000);// 搜索结果页面对应的Document对象Document doc = con.get();Elements es = doc.body().select("li.item-book:eq(0)"); // 根据bookTitle的搜索结果,取第一条String title; // 书名String href = null; // 链接for (Element e : es) {title = e.select("div.p-name a").text().trim(); // 书名href = e.select("div.p-name a").attr("abs:href");System.err.println("title: " + title);System.err.println("href: " + href);}// 进入书籍介绍页面con = Jsoup.connect(href).userAgent(GlobalConfig.USER_AGENT).timeout(10000);doc = con.get();System.out.println("\n《" + bookTitle + "》,8成新");System.out.println("原书购于:" + href + "\n");// 基本信息Elements basicInfo = doc.body().select("ul.detail-list li:gt(1)");System.out.println("基本信息");for (int i = 0; i < basicInfo.size(); i++) {Element e = basicInfo.get(i);String li = e.text().trim();System.out.println(li);}System.out.println("");// 内容简介Elements introInfo = doc.body().select("div#detail-root-3");for (int i = 0; i < introInfo.size(); i++) {Element e = introInfo.get(i);String cont = e.text().trim().replace("内容简介", "内容简介\n").replaceAll("\\s{2,}", "\n");System.out.println(cont);}System.out.println("");// 目录Elements contInfo = doc.body().select("div#detail-root-6 div.item-mc div.detail-content");System.out.println("目录");for (int i = 0; i < contInfo.size(); i++) {Element e = contInfo.get(i);String cont = e.html().replace("<br />", "\n");System.out.println(cont + "\n...");}System.out.println("");} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

程序中的bookTitle即为书名,修改之即可搜索不同的图书。目前输出的结果有书名、图书介绍页面的url、“商品介绍”、“内容简介”、“目录”共5项内容。

控制台输出结果:

图书名称: 机动车驾驶员教材解读
京东链接: http://item.jd.com/11390510.html《机动车驾驶员教材解读》,8成新
原书购于:http://item.jd.com/11390510.html基本信息
出版社:中国社会出版社
开本:16开
页数:222
包装:平装
出版时间:2013-11-01
版次:1
印次:1
正文语言:中文
用纸:胶版纸内容简介《机动车驾驶员教材解读》是经过多位资深法培老师研讨编辑,总结了多年的培训经验,结合最新的《机动车培训教学大纲》进行编辑著作而成。《机动车驾驶员教材解读》严格遵照《规定》与《考试大纲》的要求,依照国家道路交通法律法规,精心为所有机动车驾驶证申领者们量身打造的一本学习教材。目录
第一章 驾驶证与机动车管理第一节 申领驾驶证第二节 驾驶证的使用第三节 机动车管理第二章 道路通行规定第一节 道路通行原则第二节 道路通行规定第三节 高速公路管理规定第三章 交通信号第一节 交通信号灯第二节 交通标志第三节 交通标线第四节 交通警察手势第四章 道路交通事故处理第一节 交通事故现场处置第二节 自行协商事故处理第三节 事故现场的强制撤离第四节 机动车交通事故责任强制保险第五章 法律责任第一节 行政强制措施第二节 行政处罚第三节 部分道路交通安全违法行为的处罚标准第四节 道路交通安全违法行为的刑事法律责任第六章 机动车基本常识与养护第一节 车辆基本构造常识第二节 车辆检查与维护保养第七章 安全行车与文明驾驶第一节 安全行车第二节 文明驾驶第三节 恶劣气象和复杂道路条件下的安全驾驶第八章 紧急情况处置第一节 原则第二节 行车中常见的紧急情况处置第三节 高速公路紧急避险第九章 交通事故救护第一节 伤员急救的基本原则第二节 现场不同伤员急救方法第三节 危险化学品运输驾考模拟试题一、 交通安全法律、法规理论试题二、 安全文明驾驶知识试题
...

如需Java工程源码,请留邮箱。

自动获取网店图书介绍相关推荐

  1. 静态代理和依赖注入方式获取网店管家查询仓库信息接口

    请求的URL地址http://localhost/tp5.1/public/index.php/index/wdgj/wdgjwarehouselistGet?page=1&pageSize= ...

  2. 获取网店管家订单信息

    查询订单信息 http://open.wdgj.com/OpenApiDoc/ApiInfo.html?OpenAPIID=70056&dictID=84 这是笛佛开放平台的测试数据 < ...

  3. Delphi自动提交网页表单和获取框架网页源码

    这两个问题的实现原理其实是差不多的,所以放在一起介绍,单元MSHtml封装了我们需要的功能. 首先,新建一个DELPHI工程,在USES部分添加MSHtml单元的引用. 然后,在窗体上放置一个TWeb ...

  4. centos7自动获取ip命令_突然断网?专业分析宽带拨号和自动获取ip哪个好?

    宽带拨号上网.自动获得IP地址上网.固定IP地址上网,这3种上网方式,并教大家如何来选择. 整理了这篇文章,来详细介绍:宽带拨号上网.自动获得IP地址上网.固定IP地址上网,这3种上网方式,并教大家如 ...

  5. 突然断网?专业分析宽带拨号和自动获取ip哪个好?

    宽带拨号上网.自动获得IP地址上网.固定IP地址上网,这3种上网方式,并教大家如何来选择. 整理了这篇文章,来详细介绍:宽带拨号上网.自动获得IP地址上网.固定IP地址上网,这3种上网方式,并教大家如 ...

  6. 一个简单的图书网店项目

    GitHub下载地址:https://github.com/mdxiaohu/onlineBookstoreSystem 图书网店项目部署说明 一.所需环境 1.win7 系统 (已装JDK1.6以上 ...

  7. 淘宝虚拟物品自动发货---DiPiPi网店自动发货助手免费版

    淘宝的卖家: 您还在为每天守着旺旺而累得不可开交吗? 您还在手工确认收款,然后手工逐个发货吗? 使用网店自动发货助手吧,7*24小时全自动发货,让你在工作.睡觉的时候都可以赚钱. 对于发货量较小的卖家 ...

  8. 【6】网店模板目录及文件介绍

    这一节我们要学习网店模板目录及文件介绍,学好这个还是很重要的,对于以后开发网店模板有一个较好的了解,就像我们有时候做网站,一般程序会提供一个程序默认的模板给我们使用,让我们了解这个程序有那些模块和开发 ...

  9. 自动登录网易云获取近一周常听歌单

    selenium滑块拖动验证 1.前言 2.环境 3.代码 谢谢你的浏览(End) 1.前言 实验网站:网易云(https://music.163.com/) 本次实验主要用于练习cookie的使用 ...

最新文章

  1. 安装黑屏_含能公司黑屏管理助力智能化改造
  2. 大话设计模式(五 体会简单工厂模式的美妙)
  3. PHP的chunk_split() 函数把字符串分割为一连串更小的部分
  4. 一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)
  5. Mac 运行goland出现can‘t load package: package xxxx is not in GOROOT问题排查
  6. PyTorch 1.0 中文文档:torch.nn.init
  7. java学习(三) java 中 mongodb的各种操作
  8. code第一部分数组:第十七题 爬楼梯问题
  9. Linux复习-常见命令及文件操作
  10. STM8L 低功耗模式说明
  11. 2022腾讯云学生服务器价格申请认证及购买攻略!
  12. UEFI启动模式下的WIN10系统迁移指南
  13. ES3、ES4、ES5、ES6区别
  14. 亚马逊测评项目怎么做?市场如何?测评资源怎么找​?
  15. python3 结束进程
  16. 宁波市第一医院附近的房屋调研
  17. 问道手游平民玩家什么职业好
  18. 所有的环境都配置好了,将新创建的weex项目导入到Android studio中的时候,出现的错误。...
  19. squid+icap+clamav网关杀毒
  20. 如何让我们的人生,拥有更多的可能性?

热门文章

  1. DOS中的dir命令的参数
  2. VMware虚拟机解决网络不可达
  3. 社交电商再次升温, 无忧猴正掀起第三次零售革命
  4. Mixlab无界社区新年礼!密室逃脱游戏社交内测资格放送!
  5. 树莓派的有线网络和无线网络设置
  6. 互联网架构为什么要做服务化?
  7. 为什么要微服务架构服务化?
  8. (转)java 数组转字符串 字符串转数组
  9. 用Git上传本地代码到代码仓库
  10. 签订认购书后开发商上涨房价这样合不合法