JAVA综合面试题 页面的抓取 解析 保存数据库和生成HTML的页面展示
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
次例子可以用来学习网络编程,正则表达式的使用,泛型,数据库的基本操作等JAVA知识
问题如下:来源于论坛
http://topic.csdn.net/u/20090616/13/59aa4e2d-3752-45df-9c1b-c65c46c3e4d7.html
写一个jsp页面,访问时显示从下面的页面提取出的销售商详细信息:价格、运费、经销
商基本信息等,并写到一个数据库表里。
http://www.amazon.com/gp/offer-listing/B0012J52OC/
数据抓取的问题,涉及到
1 用URLConnection 读取页面信息,用httpclient也行
2 用Pattern 解析页面并拿到你要的信息
3 显示数据
4 存入数据库
这个是一个综合的考试,涉及的知识面比较广。
1 我这里只给出关键的部分,使用java程序实现,而不是JSP的代码。移植工作请自行完成。
2 我使用自己的数据库连接,请替换为应用服务器提供的数据源为好
3 代码分三部分,数据库结构,POJO类和应用程序,当然还有一个辅助类,也是我自己写的
4 欢迎光临老紫竹的JAVA世纪网 http://www.java2000.net, 呵呵,广告放里面了
一、数据库结构 AmazonGoods.sql 使用的是MySQL的数据库
- -- ----------------------------
- -- Table structure for amazongoods
- -- ----------------------------
- CREATE TABLE `amazongoods` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `price` decimal(10,0) NOT NULL,
- `shipping` decimal(10,0) NOT NULL,
- `Seller` text NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
-- ------------------------------ Table structure for amazongoods-- ----------------------------CREATE TABLE `amazongoods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `price` decimal(10,0) NOT NULL, `shipping` decimal(10,0) NOT NULL, `Seller` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
二、POJO类 AmazonGoods.java
- package com.laozizhu.test.amazon;
- import java.math.BigDecimal;
- /**
- * 某一行的商品数据
- *
- * @author 老紫竹的家(laozizhu.com)
- *
- */
- class AmazonGoods {
- public long getId() {
- return id;
- }
- public void setId(long id) {
- this.id = id;
- }
- public BigDecimal getPrice() {
- return price;
- }
- public void setPrice(BigDecimal price) {
- this.price = price;
- }
- public BigDecimal getShipping() {
- return shipping;
- }
- public void setShipping(BigDecimal shipping) {
- this.shipping = shipping;
- }
- public String getSeller() {
- return seller;
- }
- public void setSeller(String seller) {
- this.seller = seller;
- }
- // 序列号,主键
- private long id;
- // 价格
- private BigDecimal price;
- // 运费
- private BigDecimal shipping;
- // 商家信息
- private String seller;
- }
package com.laozizhu.test.amazon;import java.math.BigDecimal;/** * 某一行的商品数据 * * @author 老紫竹的家(laozizhu.com) * */class AmazonGoods { public long getId() { return id; } public void setId(long id) { this.id = id; } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } public BigDecimal getShipping() { return shipping; } public void setShipping(BigDecimal shipping) { this.shipping = shipping; } public String getSeller() { return seller; } public void setSeller(String seller) { this.seller = seller; } // 序列号,主键 private long id; // 价格 private BigDecimal price; // 运费 private BigDecimal shipping; // 商家信息 private String seller;}
三、应用类
- package com.laozizhu.test.amazon;
- import java.math.BigDecimal;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Properties;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import com.laozizhu.tools.PageService;
- public class AmazonFetch {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // 我这里需要设置代理,如果你能直接访问互联网,则无需这段代码了
- initProxy();
- // 读取页面数据
- String str = PageService.getPage("http://www.amazon.com/gp/offer-listing/B0012J52OC/", "ISO-8859-1");
- // 解析页面,拿到商品信息
- List<AmazonGoods> list = parse(str);
- // 生成HTML表格
- buildTable(list);
- // 存入数据库
- saveToMySQL(list);
- }
- /**
- * 简单的代理服务器,无需密码认证
- */
- private static void initProxy() {
- Properties prop = System.getProperties();
- // prop.put("proxySet", "true");
- // 设置http访问要使用的代理服务器的地址
- prop.setProperty("http.proxyHost", "10.60.8.20");
- // 设置http访问要使用的代理服务器的端口
- prop.setProperty("http.proxyPort", "8080");
- }
- // 注意,美元符号要转义
- // 因为报价都包含小数点,所以用数字+小数点+2位小数即可
- // 商家信息包含了对应的标签
- static Pattern pPrice = Pattern.compile(
- "<span class=/"price/">//$([//d]+//.[//d]{2})</span>.*?(<ul class=/"sellerInformation/">.+?</ul>)", Pattern.DOTALL);
- // 运费
- // <span class="price_shipping">+ $6.04</span>
- static Pattern pShipping = Pattern
- .compile("<span class=/"price_shipping/">//+ //$([//d]+//.[//d]{2})</span>", Pattern.DOTALL);
- /**
- * 解析页面,获得商品列表
- *
- * @param page
- * 页面
- * @return 商品列表
- */
- private static List<AmazonGoods> parse(String page) {
- // 首先,把商品分成多个字符串片段
- // 分割符就是表格里的内容了。这个得查看HTML源代码才能找到合适的
- String[] strs = page.split("<tbody class=/"result/">");
- // 构造结果
- // 默认长度
JAVA综合面试题 页面的抓取 解析 保存数据库和生成HTML的页面展示相关推荐
- java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...
JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...
- 免费网站数据抓取插件,可视化页面数据抓取插件
网站页面数据抓取插件,允许我们将数据从网站直接抓取到我们的本地或者页面.网站网页数据抓取(也称为ScreenScraping.WebDataExtraction.WebHarvesting等)是一种用 ...
- 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)
转自原文 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp) 最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决 ...
- 网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp
网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp 最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决定试一 ...
- java 知网爬虫_怎样抓取中国知网数据
2,快捷采集的使用方法:如何使用快捷采集 在中国知网通过高级检索,输入关键词后抓取相关文章的标题.作者.摘要.关键词等信息.但是中国知网在输入关键词搜索后网址并不会发生变化,所以在抓取的时候我们需要爬 ...
- node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地
node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地 使用模块request.fs,request模块在npm里平均月下载量超过3000W次,那是相当的牛逼. node版本 ...
- java使用爬虫工具jsoup实现抓取网页的内容及图片并写入到word文档中
背景: 有个朋友最近让帮忙写个小功能,需求大概是,1万个链接,让爬每个链接中的某一段文章并附一张图片,每五个链接写入到一个word文档中. 基本思路,就是先去找个爬虫框架把链接网页中内容和图片写到wo ...
- JAVA爬虫进阶之springboot+webmagic抓取顶点小说网站小说
闲来无事最近写了一个全新的爬虫框架WebMagic整合springboot的爬虫程序,不清楚WebMagic的童鞋可以先查看官网了解什么是Webmagic,顺便说说用springboot时遇到的一些坑 ...
- 爬虫技术 -- 进阶学习(十)网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)...
最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决定试一试~ 于是到https://www.nuget.org/packages/Scrapy ...
最新文章
- 命令行里给个注释,AI就能自动生成代码
- import tensorflow 报错 ImportError: DLL load failed: 找不到指定的模块。
- 获取壁纸设置背景android,【Android学习】获取Bing 15天前到明天的壁纸,并设置为背景...
- MySQL运算符ppt_mysql运算符
- Vue2.0 的漫长学习ing-2-6
- 算数基本定理 + 例题
- 【爬虫】获取新郑机场出租车实时数据
- 详解 inner join with another 'dataframe' df1.join(df2, $df1Key === $df2Key)
- 工业互联网标识解析与标识服务机构服务能力成熟度等级评估管理平台【需求规格说明书/用户手册】
- 尔雅 科学通史(吴国盛) 个人笔记及课后习题 2018 第十章 20世纪的科学技术变革
- 批量管理微信社群,社群助手
- 先决条件(一)问题定义和需求分析
- 二十一、Java8新特性——Stream API【黑马JavaSE笔记】
- 手机如何测光照度_照度测定方法
- 喝干红葡萄酒的十大好处
- 电脑桌面右下方点击失灵,其他桌面区域正常
- 常用电子元器件应用要点及识别方法
- DV、LS路由算法Java编程实现
- 基础设施建设取得新进展,区块链产业化提速 | 产业区块链发展周报
- 【软件与系统安全笔记】一、引入