⑴ 关于java中arraylist的使用问题——数据覆盖
GoodsBean gBean;这句改为GoodsBean gBean=new GoodBean(); 因为你没有为这个对象开辟一个新的内存空间,所以每次循环的时候都是把之前的那个对象引用重新指向到当前对象。到最后所有的对象都引用最后一次循环中对象的地址,所以list里面的对象都是最后一次循环的内容。希望对你有所帮助
⑵ 如何用java实现抓取商城商品信息到自己的页面上来!!! 求解啊,大神们!!
对于加密的网站还没去研究,不知道能不能抓取,现在只是对一些没有加密的网站进行网页数据抓取。刚刚开始写的时候以为很多网站都能抓取,但是发现很多都加密了,本来以为一些地址可以通过网页数据检测工具测出他的数据变化,但是只能监测到一些通过js显示的数据,依然不能抓取到加密的网站。嗨,这个问题以后再说吧。
[java]
import java.net.* ;
import java.io.* ;
import java.util.regex.* ;
public class Capture{
public static void main(String args[])throws Exception{
System.out.println("*************************手机号查询************************") ;
System.out.println("我的位置是:" + new GrabMobile().grabMobileLocation("15023141745")) ;
System.out.println("手机卡类型是:" + new GrabMobile().grabMobileType("15023141745")) ;
System.out.println("我的邮编是:" + new GrabMobile().grabMobilePost("15023141745")) ;
System.out.println("*************************身份证查询************************") ;
System.out.println("我的性别是:" + new GrabIdentity().grabIdentitySex("362203199208243575")) ;
System.out.println("我的生日是:" + new GrabIdentity().grabIdentityBirth("362203199208243575")) ;
System.out.println("我的家乡是:" + new GrabIdentity().grabIdentityHome("362203199208243575")) ;
}
}
class GrabMobile{
public String grabMobileLocation(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "卡号归属地" ;
String strEnd = "卡 类 型";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+42,end-33) ;
result = drawChMob(result) ;
return result ;
}
public String grabMobileType(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "卡 类 型" ;
String strEnd = "<TD align=\"center\">区 号</TD>";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+12,end) ;
result = drawChMob(result) ;
result = result.substring(1) ;
return result ;
}
public String grabMobilePost(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "邮 编" ;
String strEnd = "更详细的..";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+40,end-55) ;
return result ;
}
public String drawChMob(String str){
StringBuffer strBuf = new StringBuffer() ;
String regex="([\u4e00-\u9fa5]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()){
strBuf.append(matcher.group(0)).toString() ;
}
return strBuf.toString() ;
}
}
class GrabIdentity{
public String grabIdentitySex(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = " 别" ;
String strEnd = "出生日期";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+7,end) ;
result = drawCh(result) ;
return result ;
}
public String grabIdentityBirth(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "出生日期:</td><td class=\"tdc2\">" ;
String strEnd = "</td><tr><tr><td class=";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+27,end) ;
return result ;
}
public String grabIdentityHome(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "证 地:</td><td class=\"tdc2\">" ;
String strEnd = "<br/></td></tr><tr><td class=\"tdc3\" valign=\"top\" align=\"right\">部分或" ;
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+31,end) ;
return result ;
}
public String drawCh(String str){
StringBuffer strBuf = new StringBuffer() ;
String regex="([\u4e00-\u9fa5]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
if(matcher.find()){
str = strBuf.append(matcher.group(0)).toString() ;
}
return str ;
}
}
待会传上改装成的android小程序,可以手机号查询和身份证查询。
⑶ 怎么用java调用淘宝开发平台获得淘宝的所有的类目,要详细的接口
淘宝的API有些是开放的,我查了一下所有类目的API是收费的,需要申请APIKey,然后调用对应查询接口,就能返回XML或JSON数据进行自己的处理了。
如果真是开发需要,就可以买淘宝的服务啊。
调用很简单,比如taobao.itemcats.get 接口(获取后台供卖家发布商品的标准商品类目),如下Java代码就返回结果了(前提是提供APIKey,需要申请审核)
TaobaoClientclient=newDefaultTaobaoClient(url,appkey,secret);
ItemcatsGetRequestreq=newItemcatsGetRequest();
req.setFields("cid,parent_cid,name,is_parent");
req.setParentCid(50011999L);
req.setCids("18957,19562,");
ItemcatsGetResponseresponse=client.execute(req);
另外,变通的方法是自己开发爬虫,在淘宝页面上抓取,但问题是得不到淘宝技术支持,比如淘宝改版后也得跟着改动爬虫代码。
⑷ JAVA中,定义了一个物品集合,如何通过一个商品的编号得到该商品的所有信息。
首先你自己创建一个商品类,比如 class Goods{},然后在这个类里边定义这些属性,比如你的name,price等,然后分别实现他们的get、set方法,完了之后定义一个list。
比如:list<Goods> glist = new ArrayList<Goods>();
现在你可以创建商品并将其放入这个list集合中了。
比如:Goods good = new Goods();
good.setGoodsId("goodsId"); good.setName("goodsName"); ...
然后将good存入list中,glist.add(good);
然后我们再定义第二件商品,比如是一个键盘
good = new Goods(); good.setName("键盘");.....
同样我们再将其放入list中,glist.add(good);
此时glist中有两件商品,假设我们现在输出第二件商品的所有信息
System.out.println(glist.get(1).getGoodsId());
System.out.println(glist.get(1).getName);
.......
注意,第一件商品为get(0),下标和数组类似
⑸ 使用java语言爬取自己的淘宝订单看看买了哪些东西
Java爬虫框架WebMagic简介及使用
一、介绍
webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能。
二、概览
WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能(例如注解模式编写爬虫等)。
WebMagic的结构分为Downloader、PageProcessor、Scheler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
2.1 WebMagic的四个组件
Downloader
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。
PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
Scheler
Scheler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。除非项目有一些特殊的分布式需求,否则无需自己定制Scheler。
Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
2.2 用于数据流转的对象
Request
Request是对URL地址的一层封装,一个Request对应一个URL地址。它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式。
Page
Page代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。Page是WebMagic抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。
ReusltItems
ReusltItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。它的API与Map很类似,值得注意的是它有一个字段skip,若设置为true,则不应被Pipeline处理。
2.3 控制爬虫运转的引擎—Spider
Spider是WebMagic内部流程的核心。Downloader、PageProcessor、Scheler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能。
对于编写一个爬虫,PageProcessor是需要编写的部分,而Spider则是创建和控制爬虫的入口。
2.4 WebMagic项目组成
WebMagic项目代码包括几个部分,在根目录下以不同目录名分开。它们都是独立的Maven项目。
WebMagic主要包括两个包,这两个包经过广泛实用,已经比较成熟:
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬虫基本模块和基本抽取器。
webmagic-extension
webmagic-extension是WebMagic的主要扩展模块,提供一些更方便的编写爬虫的工具。包括注解格式定义爬虫、JSON、分布式等支持。
三、 基本的爬虫
3.1 爬虫的流程 (可以参考上边的框架架构图)
Downloader-页面下载
页面下载是一切爬虫的开始。
大部分爬虫都是通过模拟http请求,接收并分析响应来完成。这方面,JDK自带的HttpURLConnection可以满足最简单的需要,而Apache HttpClient(4.0后整合到HttpCompenent项目中)则是开发复杂爬虫的不二之选。它支持自定义HTTP头(对于爬虫比较有用的就是User-agent、cookie等)、自动redirect、连接复用、cookie保留、设置代理等诸多强大的功能。
webmagic使用了HttpClient 4.2,并封装到了HttpClientDownloader。学习HttpClient的使用对于构建高性能爬虫是非常有帮助的,官方的Tutorial就是很好的学习资料。目前webmagic对HttpClient的使用仍在初步阶段,不过对于一般抓取任务,已经够用了
PageProcessor-页面分析及链接抽取
Selector是webmagic为了简化页面抽取开发的独立模块,是整个项目中我最得意的部分。这里整合了CSS Selector、XPath和正则表达式,并可以进行链式的抽取,很容易就实现强大的功能。即使你使用自己开发的爬虫工具,webmagic的Selector仍然值得一试
Jsoup
HtmlParser
Apache tika
HtmlCleaner与Xpath
这里说的页面分析主要指HTML页面的分析。页面分析可以说是垂直爬虫最复杂的一部分,在webmagic里,PageProcessor是定制爬虫的核心。通过编写一个实现PageProcessor接口的类,就可以定制一个自己的爬虫
HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:
webmagic的Selector
Scheler-URL管理
URL管理的问题可大可小。对于小规模的抓取,URL管理是很简单的。我们只需要将待抓取URL和已抓取URL分开保存,并进行去重即可。使用JDK内置的集合类型Set、List或者Queue都可以满足需要。如果我们要进行多线程抓取,则可以选择线程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap。因为小规模的URL管理非常简单,很多框架都并不将其抽象为一个模块,而是直接融入到代码中。但是实际上,抽象出Scheler模块,会使得框架的解耦程度上升一个档次,并非常容易进行横向扩展,这也是我从scrapy中学到的。
Pipeline-离线处理和持久化
Pipeline其实也是容易被忽略的一部分。大家都知道持久化的重要性,但是很多框架都选择直接在页面抽取的时候将持久化一起完成,例如crawer4j。但是Pipeline真正的好处是,将页面的在线分析和离线处理拆分开来,可以在一些线程里进行下载,另一些线程里进行处理和持久化。
3.2 使用WebMagic爬取一个壁纸网站
首先引入WebMagic的依赖,webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在项目中添加这两个包的依赖,即可使用WebMagic。
maven中引入依赖jar包
不使用maven的用户,可以去http://webmagic.io中下载最新的jar包。
⑹ java查询商品信息
是很抽象
首先连库(数据库)
执行查询语句
数值返回java界面(或jsp调用界面)
⑺ java抓取京东商城商品信息,根据网页源文件如何写抓取如下信息:
听说过jsoup吗。很简单,抄两句话搞定。
Document document = Jsoup
.connect("这个页面的url例如:http://www..com")
.method(Connection.Method.GET)
.followRedirects(false)
.timeout(100000)
.get();
Element el=document.getElementById("zzh_jd")//div 开始的id 。
//然后这个element你想怎么用就怎么用了。
//jsoup的使用类似于javascript很方便。
⑻ 用java怎么获取淘宝商品链接中的商品id。。。你去淘宝随便搜索一个商品
这个只能复制截取
有时候链接长的也很麻烦
如果自己在开店在电脑上操作会方便很多