java抓取网页内容

java抓取网页内容

java抓取网页内容( JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-03-18 06:12 • 来自相关话题

  java抓取网页内容(
JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)
  java爬虫Gecco工具抓取新闻实例
  更新时间:2016年10月28日11:11:19 作者:赵霞客
  本文文章主要介绍JAVA爬虫Gecco工具抓取新闻的例子,有一定的参考价值,感兴趣的朋友可以参考一下。
  最近看到Gecoo爬虫工具,感觉还是比较简单好用的。都写个DEMO测试,抓起来。网站
  ,主要是抓取新闻的标题和发布时间作为抓取的测试对象。通过选择像 Jquery 选择器这样的节点来抓取 HTML 节点非常方便。 Gecco代码主要使用注解来实现URL匹配,看起来更加简洁美观。
  添加 Maven 依赖
  
com.geccocrawler
gecco
1.0.8
  编写爬取列表页面
  @Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {
@Request
private HttpRequest request;
@RequestParameter
private int pageIndex;
@RequestParameter
private int pageSize;
@HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")
private List newList;
}
  @PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline {
public void process(ZJNewsGeccoList zjNewsGeccoList) {
HttpRequest request=zjNewsGeccoList.getRequest();
for (HrefBean bean:zjNewsGeccoList.getNewList()){
//进入祥情页面抓取
SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));
}
int page=zjNewsGeccoList.getPageIndex()+1;
String nextUrl = "http://zj.zjol.com.cn/home.htm ... 3B%3B
//抓取下一页
SchedulerContext.into(request.subRequest(nextUrl));
}
}
  写爬吉祥页
  @Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {
@Text
@HtmlField(cssPath = "#headline")
private String title ;
@Text
@HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")
private String createTime;
}
  @PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline {
public void process(ZJNewsDetail zjNewsDetail) {
System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());
}
}
  启动主函数
  public class Main {
public static void main(String [] rags){
GeccoEngine.create()
//工程的包路径
.classpath("com.zhaochao.gecco.zj")
//开始抓取的页面地址
.start("http://zj.zjol.com.cn/home.htm ... 6quot;)
//开启几个爬虫线程
.thread(10)
//单个爬虫每次抓取完一个请求后的间隔时间
.interval(10)
//使用pc端userAgent
.mobile(false)
//开始运行
.run();
}
}
  获取结果
  
  
  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 查看全部

  java抓取网页内容(
JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)
  java爬虫Gecco工具抓取新闻实例
  更新时间:2016年10月28日11:11:19 作者:赵霞客
  本文文章主要介绍JAVA爬虫Gecco工具抓取新闻的例子,有一定的参考价值,感兴趣的朋友可以参考一下。
  最近看到Gecoo爬虫工具,感觉还是比较简单好用的。都写个DEMO测试,抓起来。网站
  ,主要是抓取新闻的标题和发布时间作为抓取的测试对象。通过选择像 Jquery 选择器这样的节点来抓取 HTML 节点非常方便。 Gecco代码主要使用注解来实现URL匹配,看起来更加简洁美观。
  添加 Maven 依赖
  
com.geccocrawler
gecco
1.0.8
  编写爬取列表页面
  @Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {
@Request
private HttpRequest request;
@RequestParameter
private int pageIndex;
@RequestParameter
private int pageSize;
@HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")
private List newList;
}
  @PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline {
public void process(ZJNewsGeccoList zjNewsGeccoList) {
HttpRequest request=zjNewsGeccoList.getRequest();
for (HrefBean bean:zjNewsGeccoList.getNewList()){
//进入祥情页面抓取
SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));
}
int page=zjNewsGeccoList.getPageIndex()+1;
String nextUrl = "http://zj.zjol.com.cn/home.htm ... 3B%3B
//抓取下一页
SchedulerContext.into(request.subRequest(nextUrl));
}
}
  写爬吉祥页
  @Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {
@Text
@HtmlField(cssPath = "#headline")
private String title ;
@Text
@HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")
private String createTime;
}
  @PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline {
public void process(ZJNewsDetail zjNewsDetail) {
System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());
}
}
  启动主函数
  public class Main {
public static void main(String [] rags){
GeccoEngine.create()
//工程的包路径
.classpath("com.zhaochao.gecco.zj")
//开始抓取的页面地址
.start("http://zj.zjol.com.cn/home.htm ... 6quot;)
//开启几个爬虫线程
.thread(10)
//单个爬虫每次抓取完一个请求后的间隔时间
.interval(10)
//使用pc端userAgent
.mobile(false)
//开始运行
.run();
}
}
  获取结果
  
  
  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-03-15 00:10 • 来自相关话题

  java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)
  java抓取网页内容教程教你java抓取网页内容之前,先强调一下,只有两种方法,第一种是重定向,就是net.url.redirect()把网页的源代码反馈给你,然后获取源代码,具体的分析请查看下面这篇教程,都是类的分析,有比较详细的讲解。java抓取网页内容教程-524个网页,200万数据分析的分享.html。
  如何根据分类抓取网页内容首先我们要确定我们要抓取的是标题、关键词还是url。只需要确定这三个就可以了,先找一个类,然后针对一个类做点操作就好。上面展示的都是分类抓取,我们在抓取第一个抓取关键词。1.获取分类的url2.对url的语句重定向,再把语句拉到新目录下面for循环。等语句完成就生成所需要的代码。第一步分析展示图如下下面是类的分析展示图如下。
  哥们你最后用的什么方法呢?我最近也遇到这个问题,抓取数据都有,每天都要搜索,今天抓取了6600万的数据。有什么办法好呢,自己抓取过程中碰到的问题,
  这是一个功能比较全面的网站哦,里面抓取了各个时段各个地区的消息,你可以看看我们日常已经爬取了哪些内容,欢迎交流哦。es文本处理爬虫之前要先安装爬虫相关的工具,然后就是获取网站的代码了。推荐直接百度,并按照这个教程一步步进行学习。 查看全部

  java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)
  java抓取网页内容教程教你java抓取网页内容之前,先强调一下,只有两种方法,第一种是重定向,就是net.url.redirect()把网页的源代码反馈给你,然后获取源代码,具体的分析请查看下面这篇教程,都是类的分析,有比较详细的讲解。java抓取网页内容教程-524个网页,200万数据分析的分享.html。
  如何根据分类抓取网页内容首先我们要确定我们要抓取的是标题、关键词还是url。只需要确定这三个就可以了,先找一个类,然后针对一个类做点操作就好。上面展示的都是分类抓取,我们在抓取第一个抓取关键词。1.获取分类的url2.对url的语句重定向,再把语句拉到新目录下面for循环。等语句完成就生成所需要的代码。第一步分析展示图如下下面是类的分析展示图如下。
  哥们你最后用的什么方法呢?我最近也遇到这个问题,抓取数据都有,每天都要搜索,今天抓取了6600万的数据。有什么办法好呢,自己抓取过程中碰到的问题,
  这是一个功能比较全面的网站哦,里面抓取了各个时段各个地区的消息,你可以看看我们日常已经爬取了哪些内容,欢迎交流哦。es文本处理爬虫之前要先安装爬虫相关的工具,然后就是获取网站的代码了。推荐直接百度,并按照这个教程一步步进行学习。

java抓取网页内容(PS教程-PS制作远程服务器制作教程)

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-03-11 07:24 • 来自相关话题

  java抓取网页内容(PS教程-PS制作远程服务器制作教程)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != &#39;\"&#39;);j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助。同时希望能多支持ASPKU源码库!
  注:请移步JAVA教程频道阅读相关教程知识。 查看全部

  java抓取网页内容(PS教程-PS制作远程服务器制作教程)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != &#39;\"&#39;);j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助。同时希望能多支持ASPKU源码库!
  注:请移步JAVA教程频道阅读相关教程知识。

java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-03-10 21:01 • 来自相关话题

  java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
<p> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; /** * Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //储存返回结果 private LinkedHashMap mapOfBaike; //获取搜索信息 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通过网络链接获取信息 private static LinkedHashMap getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索词条的节点 String startNode = ""; //词条的链接关键字 String keyOfHref = "href=\""; //词条的标题关键字 String keyOfTitle = "target=\"_blank\">"; String endNode = ""; boolean isNode = false; String title; String href; String rLine; LinkedHashMap keyMap = new LinkedHashMap(); //开始网络请求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取网页内容 while ((rLine = bufferedReader.readLine()) != null){ //判断目标节点是否出现 if(rLine.contains(startNode)){ isNode = true; } //若目标节点出现,则开始抓取数据 if (isNode){ //若目标结束节点出现,则结束读取,节省读取时间 if (rLine.contains(endNode)) { //关闭读取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值为空则不读取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //获取词条对应的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //获取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j 查看全部

  java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
<p> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; /** * Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //储存返回结果 private LinkedHashMap mapOfBaike; //获取搜索信息 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通过网络链接获取信息 private static LinkedHashMap getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索词条的节点 String startNode = ""; //词条的链接关键字 String keyOfHref = "href=\""; //词条的标题关键字 String keyOfTitle = "target=\"_blank\">"; String endNode = ""; boolean isNode = false; String title; String href; String rLine; LinkedHashMap keyMap = new LinkedHashMap(); //开始网络请求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取网页内容 while ((rLine = bufferedReader.readLine()) != null){ //判断目标节点是否出现 if(rLine.contains(startNode)){ isNode = true; } //若目标节点出现,则开始抓取数据 if (isNode){ //若目标结束节点出现,则结束读取,节省读取时间 if (rLine.contains(endNode)) { //关闭读取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值为空则不读取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //获取词条对应的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //获取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j

java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-03-10 21:01 • 来自相关话题

  java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)
  想了解JAVA使用爬虫爬取网站网页内容的方法,fzhlee会为大家讲解JAVA使用爬虫爬取网站网页内容的相关知识和代码示例这篇文章,欢迎阅读指正,我们先关注一下:JAVA,爬虫,爬取,网页内容,一起来学习吧。
  本文的例子描述了JAVA使用爬虫爬取网站网页内容的方法。分享给大家,供大家参考。详情如下:
  最近在用JAVA研究爬网,呵呵,进门了,和大家分享一下我的经验
  提供了以下两种方法,一种是使用apache提供的包。另一种是使用JAVA自带的。
  代码如下:
<p>
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength 查看全部

  java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)
  想了解JAVA使用爬虫爬取网站网页内容的方法,fzhlee会为大家讲解JAVA使用爬虫爬取网站网页内容的相关知识和代码示例这篇文章,欢迎阅读指正,我们先关注一下:JAVA,爬虫,爬取,网页内容,一起来学习吧。
  本文的例子描述了JAVA使用爬虫爬取网站网页内容的方法。分享给大家,供大家参考。详情如下:
  最近在用JAVA研究爬网,呵呵,进门了,和大家分享一下我的经验
  提供了以下两种方法,一种是使用apache提供的包。另一种是使用JAVA自带的。
  代码如下:
<p>
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength

java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)

网站优化优采云 发表了文章 • 0 个评论 • 289 次浏览 • 2022-03-07 10:03 • 来自相关话题

  java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)
  java抓取网页内容常用的几种办法在网上下载大数据接口java代码,对其页面进行抓取,如微信公众号文章等。如果抓取手机官网上所有的商品,那么复杂的爬虫代码将变得不可行。所以,一般做文章分析,所抓取的网页都是局部的,所以不会存在复杂的request请求,也是相对简单的。一、无需爬虫抓取文章分析首先,我们可以通过官网拿到搜索的相关商品列表信息,这些信息是java最主要功能需求来源。
  然后我们可以用java来分析页面传递的商品列表并进行数据分析。接下来我们用java抓取文章的分析页面地址,但是分析页面地址是异步请求,需要客户端等待服务器响应后才能进行抓取。我们只抓取首页商品列表页的数据,直接到网页底部,可以通过f12进行调试。点击图片放大查看列表页将页面中的数据抓取下来,我们点击回首页分析。
  点击图片放大查看最近三次用户点击商品列表数据3.点击回首页分析。点击图片放大查看4.点击用户列表分析,点击图片放大查看5.点击用户列表分析,点击图片放大查看这样我们就可以找到传递给我们网页的数据了,用java也是能够完成的。如果这样做还是不能完成,还需要下面的命令。6.点击图片放大查看命令传递给我们的数据。
  从以上查看可以看出,我们总共抓取了8万多条数据。那么我们在分析数据的时候应该如何去处理呢?我们首先是要构建html源代码,下面以实现github爬虫为例子,构建静态页面的html源代码首先我们知道github是域名。为方便自己以及项目打包和发布,我们知道,github是阿里云的域名,如果我们抓取的网站是公司的,那么数据请求的时候其实对应的是公司的域名。
  如果我们的网站是iaas服务,那么数据请求都需要iaas域名。还有其他服务,以及分析数据也是需要iaas域名。打包发布其实也需要iaas域名,上面通过的命令可以发现,我们已经抓取到数据了,但是没有一个相应的html源代码文件,这个一般会存在网站服务器上。这个时候就需要构建一个文件系统,我们会发现服务器端也可以文件系统,我们只要修改相应的数据库的地址就可以成功创建。
  那么我们根据上述构建html源代码的步骤,先构建html源代码文件。然后直接发布到数据库。然后我们打开抓取到的数据,数据来源如何?一般我们抓取到的数据来源如下:电影院,电影院的排名,星级高低排名到影院排名,票房排名,购票排名,位置商圈排名,商圈交通信息,配套商圈消费水平排名到公交车站,公交车站的排名到公交车站的排名,公交车站的排名到公交车站的排名到路线排名,路线排名到公交车站的。 查看全部

  java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)
  java抓取网页内容常用的几种办法在网上下载大数据接口java代码,对其页面进行抓取,如微信公众号文章等。如果抓取手机官网上所有的商品,那么复杂的爬虫代码将变得不可行。所以,一般做文章分析,所抓取的网页都是局部的,所以不会存在复杂的request请求,也是相对简单的。一、无需爬虫抓取文章分析首先,我们可以通过官网拿到搜索的相关商品列表信息,这些信息是java最主要功能需求来源。
  然后我们可以用java来分析页面传递的商品列表并进行数据分析。接下来我们用java抓取文章的分析页面地址,但是分析页面地址是异步请求,需要客户端等待服务器响应后才能进行抓取。我们只抓取首页商品列表页的数据,直接到网页底部,可以通过f12进行调试。点击图片放大查看列表页将页面中的数据抓取下来,我们点击回首页分析。
  点击图片放大查看最近三次用户点击商品列表数据3.点击回首页分析。点击图片放大查看4.点击用户列表分析,点击图片放大查看5.点击用户列表分析,点击图片放大查看这样我们就可以找到传递给我们网页的数据了,用java也是能够完成的。如果这样做还是不能完成,还需要下面的命令。6.点击图片放大查看命令传递给我们的数据。
  从以上查看可以看出,我们总共抓取了8万多条数据。那么我们在分析数据的时候应该如何去处理呢?我们首先是要构建html源代码,下面以实现github爬虫为例子,构建静态页面的html源代码首先我们知道github是域名。为方便自己以及项目打包和发布,我们知道,github是阿里云的域名,如果我们抓取的网站是公司的,那么数据请求的时候其实对应的是公司的域名。
  如果我们的网站是iaas服务,那么数据请求都需要iaas域名。还有其他服务,以及分析数据也是需要iaas域名。打包发布其实也需要iaas域名,上面通过的命令可以发现,我们已经抓取到数据了,但是没有一个相应的html源代码文件,这个一般会存在网站服务器上。这个时候就需要构建一个文件系统,我们会发现服务器端也可以文件系统,我们只要修改相应的数据库的地址就可以成功创建。
  那么我们根据上述构建html源代码的步骤,先构建html源代码文件。然后直接发布到数据库。然后我们打开抓取到的数据,数据来源如何?一般我们抓取到的数据来源如下:电影院,电影院的排名,星级高低排名到影院排名,票房排名,购票排名,位置商圈排名,商圈交通信息,配套商圈消费水平排名到公交车站,公交车站的排名到公交车站的排名,公交车站的排名到公交车站的排名到路线排名,路线排名到公交车站的。

java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-03-01 14:07 • 来自相关话题

  java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
  通过JAVA API,可以成功抓取网络上大部分的指定网页内容。下面就和大家分享一下对这种方法的理解和体会。最简单的抓取方法是:
  URL url = new URL(myurl);
BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
i++;
sb.append(s+"\r\n");
}
  这种方法爬一般的网页应该是没问题的,但是当一些网页中有嵌套的重定向连接时,会报Server redirected too many times之类的错误,这是因为这个网页里面有一些代码是转到其他网页,太多的循环导致程序错误。如果只想爬取这个URL中的网页内容,不想跳转到其他网页,可以使用下面的代码。
  URL urlmy = new URL(myurl);
HttpURLConnection con = (HttpURLConnection) urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
con.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s+"\r\n");
}
  这样,在爬取的时候,程序就不会跳转到其他页面去爬取其他内容,就达到了我们的目的。
  如果我们在 Intranet 中,我们还需要为其添加代理。Java 提供对具有特殊系统属性的代理服务器的支持,只要在上述程序中添加以下程序即可。
  System.getProperties().setProperty( "http.proxyHost", proxyName );
System.getProperties().setProperty( "http.proxyPort", port );
  这样,您就可以在内网的同时从Internet上抓取您想要的东西。
  上面程序捕捉到的所有内容都存储在sb字符串中,我们可以通过正则表达式进行分析,提取出我们想要的具体内容,给我用,呵呵,这是多么美妙的一件事啊!! 查看全部

  java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
  通过JAVA API,可以成功抓取网络上大部分的指定网页内容。下面就和大家分享一下对这种方法的理解和体会。最简单的抓取方法是:
  URL url = new URL(myurl);
BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
i++;
sb.append(s+"\r\n");
}
  这种方法爬一般的网页应该是没问题的,但是当一些网页中有嵌套的重定向连接时,会报Server redirected too many times之类的错误,这是因为这个网页里面有一些代码是转到其他网页,太多的循环导致程序错误。如果只想爬取这个URL中的网页内容,不想跳转到其他网页,可以使用下面的代码。
  URL urlmy = new URL(myurl);
HttpURLConnection con = (HttpURLConnection) urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
con.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s+"\r\n");
}
  这样,在爬取的时候,程序就不会跳转到其他页面去爬取其他内容,就达到了我们的目的。
  如果我们在 Intranet 中,我们还需要为其添加代理。Java 提供对具有特殊系统属性的代理服务器的支持,只要在上述程序中添加以下程序即可。
  System.getProperties().setProperty( "http.proxyHost", proxyName );
System.getProperties().setProperty( "http.proxyPort", port );
  这样,您就可以在内网的同时从Internet上抓取您想要的东西。
  上面程序捕捉到的所有内容都存储在sb字符串中,我们可以通过正则表达式进行分析,提取出我们想要的具体内容,给我用,呵呵,这是多么美妙的一件事啊!!

java抓取网页内容( 2017年03月13日java利用url实现网页内容抓取的示例)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-02-23 21:20 • 来自相关话题

  java抓取网页内容(
2017年03月13日java利用url实现网页内容抓取的示例)
  Java使用url抓取网页内容
  更新时间:2017-03-13 09:42:31 作者:zangcunmiao
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望对脚本之家的支持! 查看全部

  java抓取网页内容(
2017年03月13日java利用url实现网页内容抓取的示例)
  Java使用url抓取网页内容
  更新时间:2017-03-13 09:42:31 作者:zangcunmiao
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望对脚本之家的支持!

java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-02-14 21:21 • 来自相关话题

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载! 查看全部

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载!

java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-02-09 20:06 • 来自相关话题

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页的源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载! 查看全部

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页的源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载!

java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-02-06 04:23 • 来自相关话题

  java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)
  前几天,我女朋友在网上看了一本电子书,想下载,但是那个网站只能支持在线阅读,不能下载,还好可以复制粘贴。
  于是复制粘贴的任务就交给了我。我查看了 网站 网址。单个文章的html源码非常简单。作为程序员,如何反复复制粘贴? ?
  所以有了这段代码,还是比较简单的:
<p>
package WEB;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网页抓取
* @author 胡阳
* @blog http://www.the5fire.com
*
*/
public class WebGet {
private String myUrl;
private HttpURLConnection con;
private StringBuilder contextAll = new StringBuilder("");
private int pageCount = 0;
private String pageType = "";
public WebGet() {
}
public WebGet(String url) {
this.myUrl = url;
}
public WebGet(String url,int pageCount,String pageType) {
this.myUrl = url;
this.pageCount = pageCount;
this.pageType = pageType;
}
/**
* 正则表达式
* */
public String regex() {
String googleRegex = " 查看全部

  java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)
  前几天,我女朋友在网上看了一本电子书,想下载,但是那个网站只能支持在线阅读,不能下载,还好可以复制粘贴。
  于是复制粘贴的任务就交给了我。我查看了 网站 网址。单个文章的html源码非常简单。作为程序员,如何反复复制粘贴? ?
  所以有了这段代码,还是比较简单的:
<p>
package WEB;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网页抓取
* @author 胡阳
* @blog http://www.the5fire.com
*
*/
public class WebGet {
private String myUrl;
private HttpURLConnection con;
private StringBuilder contextAll = new StringBuilder("");
private int pageCount = 0;
private String pageType = "";
public WebGet() {
}
public WebGet(String url) {
this.myUrl = url;
}
public WebGet(String url,int pageCount,String pageType) {
this.myUrl = url;
this.pageCount = pageCount;
this.pageType = pageType;
}
/**
* 正则表达式
* */
public String regex() {
String googleRegex = "

java抓取网页内容( java多线程获取铃声的json数据()(图) )

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-02-03 02:08 • 来自相关话题

  java抓取网页内容(
java多线程获取铃声的json数据()(图)
)
  java多线程抓取铃声官网的铃声数据
  更新时间:2016-04-28 11:50:47 作者:bobo_ll
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据。通过解析json数据可以看到有{"hasmore":1,"curpage":1}等指令,通过判断hasmore的值来决定是否取下一页。但是上面链接返回的json没有铃声的下载地址
  我一直想练习java多线程来获取数据。
  有一天我发现Ringtones()的官网有很多数据。
  通过观察它们的前端来获取铃声数据的ajax
  
  {类别 ID}&amp;page={分页符页码}
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据,通过解析json数据,
  可以看到有{"hasmore":1,"curpage":1}这样的指令。通过判断hasmore的值,决定是否爬取下一页。
  但是上面链接返回的json没有铃声的下载地址
  你很快就会发现,点击页面上的“下载”,你会看到
  通过以下请求,可以得到铃声的下载地址
  {铃声ID}
  
  因此,他们的数据很容易被窃取。于是我开始...
  源代码已发布在 github 上。如果您对童鞋感兴趣,可以查看
  github:
  以上代码:
  
package me.yongbo.DuoduoRingRobot;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
/* * @author yongbo_ * @created 2013/4/16 * * */
public class DuoduoRingRobotClient implements Runnable {
public static String GET_RINGINFO_URL = "http://www.shoujiduoduo.com/ri ... D%251$d&page=%2$d";
public static String GET_DOWN_URL = "http://www.shoujiduoduo.com/ri ... D%251$d";
public static String ERROR_MSG = "listId为 %1$d 的Robot发生错误,已自动停止。当前page为 %2$d";public static String STATUS_MSG = "开始抓取数据,当前listId: %1$d,当前page: %2$d";
public static String FILE_DIR = "E:/RingData/";public static String FILE_NAME = "listId=%1$d.txt";private boolean errorFlag = false;private int listId;private int page;
private int endPage = -1;private int hasMore = 1;
private DbHelper dbHelper;
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * @param endPage 结束页码 * */
public DuoduoRingRobotClient(int listId, int beginPage, int endPage)
{this.listId = listId;this.page = beginPage;this.endPage = endPage;this.dbHelper = new DbHelper();}
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * */
public DuoduoRingRobotClient(int listId, int page) {this(listId, page, -1);}
/** * 获取铃声 * */public void getRings() {String url = String.format(GET_RINGINFO_URL, listId, page);String responseStr = httpGet(url);hasMore = getHasmore(responseStr);
page = getNextPage(responseStr);
ringParse(responseStr.replaceAll("\\{\"hasmore\":[0-9]*,\"curpage\":[0-9]*\\},", "").replaceAll(",]", "]"));}/** * 发起http请求 * @param webUrl 请求连接地址 * */public String httpGet(String webUrl){URL url;URLConnection conn;StringBuilder sb = new StringBuilder();String resultStr = "";try {url = new URL(webUrl);conn = url.openConnection();conn.connect();InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader bufReader = new BufferedReader(isr);String lineText;while ((lineText = bufReader.readLine()) != null) {sb.append(lineText);}resultStr = sb.toString();} catch (Exception e) {errorFlag = true;//将错误写入txtwriteToFile(String.format(ERROR_MSG, listId, page));}return resultStr;}/** * 将json字符串转化成Ring对象,并存入txt中 * @param json Json字符串 * */public void ringParse(String json) {Ring ring = null;JsonElement element = new JsonParser().parse(json);JsonArray array = element.getAsJsonArray();// 遍历数组Iterator it = array.iterator();
Gson gson = new Gson();while (it.hasNext() && !errorFlag) {JsonElement e = it.next();// JsonElement转换为JavaBean对象ring = gson.fromJson(e, Ring.class);ring.setDownUrl(getRingDownUrl(ring.getId()));if(isAvailableRing(ring)) {System.out.println(ring.toString());
//可选择写入数据库还是写入文本//writeToFile(ring.toString());writeToDatabase(ring);}}}
/** * 写入txt * @param data 字符串 * */public void writeToFile(String data)
{String path = FILE_DIR + String.format(FILE_NAME, listId);File dir = new File(FILE_DIR);File file = new File(path);FileWriter fw = null;if(!dir.exists()){dir.mkdirs();
}try {if(!file.exists()){file.createNewFile();}fw = new FileWriter(file, true);
fw.write(data);fw.write("\r\n");fw.flush();} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}finally {try {if(fw != null){fw.close();}} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 写入数据库 * @param ring 一个Ring的实例 * */
public void writeToDatabase(Ring ring) {dbHelper.execute("addRing", ring);}
@Overridepublic void run() {while(hasMore == 1 && !errorFlag){if(endPage != -1){if(page > endPage) { break; }}System.out.println(String.format(STATUS_MSG, listId, page));
getRings();System.out.println(String.format("该页数据写入完成"));}System.out.println("ending...");}
private int getHasmore(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");
Matcher match = p.matcher(resultStr);
if (match.find()) { return Integer.parseInt(match.group(1));
} return 0;
}
private int getNextPage(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");Matcher match = p.matcher(resultStr);if (match.find()) {return Integer.parseInt(match.group(2));}return 0;}
/** * 判断当前Ring是否满足条件。当Ring的name大于50个字符或是duration为小数则不符合条件,将被剔除。 * @param ring 当前Ring对象实例 * */private boolean isAvailableRing(Ring ring){Pattern p = Pattern.compile("^[1-9][0-9]*$");
Matcher match = p.matcher(ring.getDuration());
if(!match.find()){return false;}if(ring.getName().length() > 50 || ring.getArtist().length() > 50 || ring.getDownUrl().length() == 0){return false;}return true;}
/** * 获取铃声的下载地址 * @param rid 铃声的id * */
public String getRingDownUrl(String rid){String url = String.format(GET_DOWN_URL, rid);
String responseStr = httpGet(url);return responseStr;}} 查看全部

  java抓取网页内容(
java多线程获取铃声的json数据()(图)
)
  java多线程抓取铃声官网的铃声数据
  更新时间:2016-04-28 11:50:47 作者:bobo_ll
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据。通过解析json数据可以看到有{"hasmore":1,"curpage":1}等指令,通过判断hasmore的值来决定是否取下一页。但是上面链接返回的json没有铃声的下载地址
  我一直想练习java多线程来获取数据。
  有一天我发现Ringtones()的官网有很多数据。
  通过观察它们的前端来获取铃声数据的ajax
  
  {类别 ID}&amp;page={分页符页码}
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据,通过解析json数据,
  可以看到有{"hasmore":1,"curpage":1}这样的指令。通过判断hasmore的值,决定是否爬取下一页。
  但是上面链接返回的json没有铃声的下载地址
  你很快就会发现,点击页面上的“下载”,你会看到
  通过以下请求,可以得到铃声的下载地址
  {铃声ID}
  
  因此,他们的数据很容易被窃取。于是我开始...
  源代码已发布在 github 上。如果您对童鞋感兴趣,可以查看
  github:
  以上代码:
  
package me.yongbo.DuoduoRingRobot;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
/* * @author yongbo_ * @created 2013/4/16 * * */
public class DuoduoRingRobotClient implements Runnable {
public static String GET_RINGINFO_URL = "http://www.shoujiduoduo.com/ri ... D%251$d&page=%2$d";
public static String GET_DOWN_URL = "http://www.shoujiduoduo.com/ri ... D%251$d";
public static String ERROR_MSG = "listId为 %1$d 的Robot发生错误,已自动停止。当前page为 %2$d";public static String STATUS_MSG = "开始抓取数据,当前listId: %1$d,当前page: %2$d";
public static String FILE_DIR = "E:/RingData/";public static String FILE_NAME = "listId=%1$d.txt";private boolean errorFlag = false;private int listId;private int page;
private int endPage = -1;private int hasMore = 1;
private DbHelper dbHelper;
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * @param endPage 结束页码 * */
public DuoduoRingRobotClient(int listId, int beginPage, int endPage)
{this.listId = listId;this.page = beginPage;this.endPage = endPage;this.dbHelper = new DbHelper();}
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * */
public DuoduoRingRobotClient(int listId, int page) {this(listId, page, -1);}
/** * 获取铃声 * */public void getRings() {String url = String.format(GET_RINGINFO_URL, listId, page);String responseStr = httpGet(url);hasMore = getHasmore(responseStr);
page = getNextPage(responseStr);
ringParse(responseStr.replaceAll("\\{\"hasmore\":[0-9]*,\"curpage\":[0-9]*\\},", "").replaceAll(",]", "]"));}/** * 发起http请求 * @param webUrl 请求连接地址 * */public String httpGet(String webUrl){URL url;URLConnection conn;StringBuilder sb = new StringBuilder();String resultStr = "";try {url = new URL(webUrl);conn = url.openConnection();conn.connect();InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader bufReader = new BufferedReader(isr);String lineText;while ((lineText = bufReader.readLine()) != null) {sb.append(lineText);}resultStr = sb.toString();} catch (Exception e) {errorFlag = true;//将错误写入txtwriteToFile(String.format(ERROR_MSG, listId, page));}return resultStr;}/** * 将json字符串转化成Ring对象,并存入txt中 * @param json Json字符串 * */public void ringParse(String json) {Ring ring = null;JsonElement element = new JsonParser().parse(json);JsonArray array = element.getAsJsonArray();// 遍历数组Iterator it = array.iterator();
Gson gson = new Gson();while (it.hasNext() && !errorFlag) {JsonElement e = it.next();// JsonElement转换为JavaBean对象ring = gson.fromJson(e, Ring.class);ring.setDownUrl(getRingDownUrl(ring.getId()));if(isAvailableRing(ring)) {System.out.println(ring.toString());
//可选择写入数据库还是写入文本//writeToFile(ring.toString());writeToDatabase(ring);}}}
/** * 写入txt * @param data 字符串 * */public void writeToFile(String data)
{String path = FILE_DIR + String.format(FILE_NAME, listId);File dir = new File(FILE_DIR);File file = new File(path);FileWriter fw = null;if(!dir.exists()){dir.mkdirs();
}try {if(!file.exists()){file.createNewFile();}fw = new FileWriter(file, true);
fw.write(data);fw.write("\r\n");fw.flush();} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}finally {try {if(fw != null){fw.close();}} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 写入数据库 * @param ring 一个Ring的实例 * */
public void writeToDatabase(Ring ring) {dbHelper.execute("addRing", ring);}
@Overridepublic void run() {while(hasMore == 1 && !errorFlag){if(endPage != -1){if(page > endPage) { break; }}System.out.println(String.format(STATUS_MSG, listId, page));
getRings();System.out.println(String.format("该页数据写入完成"));}System.out.println("ending...");}
private int getHasmore(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");
Matcher match = p.matcher(resultStr);
if (match.find()) { return Integer.parseInt(match.group(1));
} return 0;
}
private int getNextPage(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");Matcher match = p.matcher(resultStr);if (match.find()) {return Integer.parseInt(match.group(2));}return 0;}
/** * 判断当前Ring是否满足条件。当Ring的name大于50个字符或是duration为小数则不符合条件,将被剔除。 * @param ring 当前Ring对象实例 * */private boolean isAvailableRing(Ring ring){Pattern p = Pattern.compile("^[1-9][0-9]*$");
Matcher match = p.matcher(ring.getDuration());
if(!match.find()){return false;}if(ring.getName().length() > 50 || ring.getArtist().length() > 50 || ring.getDownUrl().length() == 0){return false;}return true;}
/** * 获取铃声的下载地址 * @param rid 铃声的id * */
public String getRingDownUrl(String rid){String url = String.format(GET_DOWN_URL, rid);
String responseStr = httpGet(url);return responseStr;}}

java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-02-02 04:02 • 来自相关话题

  java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))
  java抓取网页内容有web自带的burpweb扫描器。java抓取网页内容的有jsp自带的jsp扫描器。java抓取网页内容的有php的redissql注入。php抓取网页内容的有python的xss注入。java抓取网页内容的有perl的sql注入。网页内容的爬取是一项技术。而这些技术也存在于相应的编程语言之中。
  抓取网页内容的相关编程语言有多种:php,java,python,node.js,perl等等。利用这些编程语言,我们可以编写自己的爬虫程序,用来抓取网页内容。但是,是否编写一个爬虫程序就能自动抓取网页内容呢?这就让我们一起来探究一下:如何编写一个简单的爬虫程序?首先,回答一下,一个爬虫程序,能否抓取网页内容?答案是能的,因为网页内容被爬取时,首先会要经过处理的网页解析器来解析网页。
  每一个网页的url地址,以及返回的内容都会经过解析器的处理,然后给出对应的处理结果返回,这样爬虫程序就可以访问到指定的网页内容了。举个例子,某网站内容有:{item:{page:1,name:'favicon'}},name:'xxx',item:'link'}打开上述网页,我们就可以看到:{item:{page:1,name:'favicon'}},这段url地址下,存在{page:1,name:'favicon'}这样的网页,并且我们还能以此来展示link的内容。
  所以我们可以认为python,java,php等编程语言的程序就能够提取网页中的内容。但是,这样做有一些缺点,比如:(。
  1)爬取网页非常耗时,经常出现网页超时,卡住的情况,网页自身也会因为处理多个页面不利,或者重定向速度太慢,所以爬取时间一般不会短。
  2)爬取完成后,很难对网页内容进行修改。
  3)网页内容太多的时候,爬取网页速度会极慢。
  4)服务器容易崩溃,有的站点甚至直接崩溃。另外,爬取网页后的分析处理也是非常耗时的,浪费精力,因此抓取网页后会进行很长时间的分析以及处理。那么,爬取网页后,我们能如何对网页进行修改及改进呢?在学习一种新的语言时,可以通过对语言进行编译以及解释两步工作。那么,编译器与解释器如何对网页内容进行编译呢?解释器又如何解释及解释这个网页呢?解释器首先从文本文件解析出一些特征以后,会将这些特征以及对应的数据,转换成一些编译后的机器码(一般是一些运行时程序存储的一些数据)。
  通过一些对应的操作,将这些机器码转换成不同的二进制程序,然后编译后生成机器码,最后发送给网页服务器,服务器来解释编译后的机器码。这样我们才能通过解释器来抓取这些网页内容。生成机器码有两种方式:直接由文。 查看全部

  java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))
  java抓取网页内容有web自带的burpweb扫描器。java抓取网页内容的有jsp自带的jsp扫描器。java抓取网页内容的有php的redissql注入。php抓取网页内容的有python的xss注入。java抓取网页内容的有perl的sql注入。网页内容的爬取是一项技术。而这些技术也存在于相应的编程语言之中。
  抓取网页内容的相关编程语言有多种:php,java,python,node.js,perl等等。利用这些编程语言,我们可以编写自己的爬虫程序,用来抓取网页内容。但是,是否编写一个爬虫程序就能自动抓取网页内容呢?这就让我们一起来探究一下:如何编写一个简单的爬虫程序?首先,回答一下,一个爬虫程序,能否抓取网页内容?答案是能的,因为网页内容被爬取时,首先会要经过处理的网页解析器来解析网页。
  每一个网页的url地址,以及返回的内容都会经过解析器的处理,然后给出对应的处理结果返回,这样爬虫程序就可以访问到指定的网页内容了。举个例子,某网站内容有:{item:{page:1,name:'favicon'}},name:'xxx',item:'link'}打开上述网页,我们就可以看到:{item:{page:1,name:'favicon'}},这段url地址下,存在{page:1,name:'favicon'}这样的网页,并且我们还能以此来展示link的内容。
  所以我们可以认为python,java,php等编程语言的程序就能够提取网页中的内容。但是,这样做有一些缺点,比如:(。
  1)爬取网页非常耗时,经常出现网页超时,卡住的情况,网页自身也会因为处理多个页面不利,或者重定向速度太慢,所以爬取时间一般不会短。
  2)爬取完成后,很难对网页内容进行修改。
  3)网页内容太多的时候,爬取网页速度会极慢。
  4)服务器容易崩溃,有的站点甚至直接崩溃。另外,爬取网页后的分析处理也是非常耗时的,浪费精力,因此抓取网页后会进行很长时间的分析以及处理。那么,爬取网页后,我们能如何对网页进行修改及改进呢?在学习一种新的语言时,可以通过对语言进行编译以及解释两步工作。那么,编译器与解释器如何对网页内容进行编译呢?解释器又如何解释及解释这个网页呢?解释器首先从文本文件解析出一些特征以后,会将这些特征以及对应的数据,转换成一些编译后的机器码(一般是一些运行时程序存储的一些数据)。
  通过一些对应的操作,将这些机器码转换成不同的二进制程序,然后编译后生成机器码,最后发送给网页服务器,服务器来解释编译后的机器码。这样我们才能通过解释器来抓取这些网页内容。生成机器码有两种方式:直接由文。

java抓取网页内容(PS教程-PS制作远程服务器制作方法)

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-01-29 16:12 • 来自相关话题

  java抓取网页内容(PS教程-PS制作远程服务器制作方法)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持面团圈教程! 查看全部

  java抓取网页内容(PS教程-PS制作远程服务器制作方法)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持面团圈教程!

java抓取网页内容(java抓取网页内容大体分为如下4个步骤)

网站优化优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-01-29 08:01 • 来自相关话题

  java抓取网页内容(java抓取网页内容大体分为如下4个步骤)
  java抓取网页内容大体分为如下4个步骤:1.获取网页地址2.获取内容html文件3.解析html文件4.将获取到的html文件发送给浏览器浏览器读取这个html文件1.获取网页地址,可以利用我上面说的上一篇文章里面的代码,只要手机浏览器打开网址地址,就可以获取网页代码。我之前用浏览器的时候,用的百度(后来换了三个浏览器,用了好几种方法,才终于搞定)2.解析网页内容html文件,个人觉得这是最基础的一步,之前没有什么特别好的办法,就是把文本复制下来(网上有很多这种word插件),然后手动修改,在手机浏览器上查看,发现很多错误,就是找不到html文件。
  现在我用百度(后来换了三个浏览器,用了好几种方法,才终于搞定)今天尝试了一下,直接全文检索,大概是20分钟左右,就能找到文章所在位置,只不过找完了内容以后,发现它还有20个页码,估计我要重新翻阅一下,看看还有哪些页码的内容。不过chrome浏览器倒是可以,可以查看历史记录,然后返回的页码,就是刚才页面提示的,一共有10763个页码。
  只要使用chrome浏览器,就可以实现这个目的,使用谷歌浏览器的话,就需要有一定浏览器基础了。3.将获取到的html文件发送给浏览器浏览器解析我们发送的html文件的时候,需要一次性的解析出来,对于解析速度的影响,我这里用了一个java工具,xhr(),具体我们就不介绍了,反正就是xmlhttprequest这个东西,然后拿到相应的数据,加进数据库里面,还有数据库的建立,怎么建议大家入门,后续我会谈谈怎么建立。
  感兴趣的同学可以百度下xhr这个工具。4.把获取到的html文件发送给浏览器浏览器解析完,发现有错误提示,大概有10763个页码,估计我要重新翻阅一下,发现数据量不小,我也正在头疼这个问题,一边手机查看解析好的html文件,一边整理数据。手机那个是土豪性质的,每天都有新的页码(看这段代码的时候)然后我把这个问题提交给了问问题的小伙伴,需要她帮忙整理,一是文章都发过来了,这不丢人二是也可以培养我解决问题的能力。
  她提供了一个网址/,但是我没打开过,我也不知道行不行。ps:放一下网址,知乎排版要求,多图。yalongzyo/html-overview。 查看全部

  java抓取网页内容(java抓取网页内容大体分为如下4个步骤)
  java抓取网页内容大体分为如下4个步骤:1.获取网页地址2.获取内容html文件3.解析html文件4.将获取到的html文件发送给浏览器浏览器读取这个html文件1.获取网页地址,可以利用我上面说的上一篇文章里面的代码,只要手机浏览器打开网址地址,就可以获取网页代码。我之前用浏览器的时候,用的百度(后来换了三个浏览器,用了好几种方法,才终于搞定)2.解析网页内容html文件,个人觉得这是最基础的一步,之前没有什么特别好的办法,就是把文本复制下来(网上有很多这种word插件),然后手动修改,在手机浏览器上查看,发现很多错误,就是找不到html文件。
  现在我用百度(后来换了三个浏览器,用了好几种方法,才终于搞定)今天尝试了一下,直接全文检索,大概是20分钟左右,就能找到文章所在位置,只不过找完了内容以后,发现它还有20个页码,估计我要重新翻阅一下,看看还有哪些页码的内容。不过chrome浏览器倒是可以,可以查看历史记录,然后返回的页码,就是刚才页面提示的,一共有10763个页码。
  只要使用chrome浏览器,就可以实现这个目的,使用谷歌浏览器的话,就需要有一定浏览器基础了。3.将获取到的html文件发送给浏览器浏览器解析我们发送的html文件的时候,需要一次性的解析出来,对于解析速度的影响,我这里用了一个java工具,xhr(),具体我们就不介绍了,反正就是xmlhttprequest这个东西,然后拿到相应的数据,加进数据库里面,还有数据库的建立,怎么建议大家入门,后续我会谈谈怎么建立。
  感兴趣的同学可以百度下xhr这个工具。4.把获取到的html文件发送给浏览器浏览器解析完,发现有错误提示,大概有10763个页码,估计我要重新翻阅一下,发现数据量不小,我也正在头疼这个问题,一边手机查看解析好的html文件,一边整理数据。手机那个是土豪性质的,每天都有新的页码(看这段代码的时候)然后我把这个问题提交给了问问题的小伙伴,需要她帮忙整理,一是文章都发过来了,这不丢人二是也可以培养我解决问题的能力。
  她提供了一个网址/,但是我没打开过,我也不知道行不行。ps:放一下网址,知乎排版要求,多图。yalongzyo/html-overview。

java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-01-24 09:11 • 来自相关话题

  java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)
  为什么用Python开发爬虫更有优势?不能用Java开发?今天小编就为大家讲解一下!
  
  C/C++
  各种搜索引擎大多使用C/C++开发爬虫,可能是因为搜索引擎爬虫重要的是采集网站信息,对页面的解析要求不高。
  Python
  Python语言具有强大的网络功能,可以模拟登录和解析JavaScript。缺点是网页解析。Python 编写程序非常方便,特别是对于专注的爬虫。目标 网站 经常更改。使用Python根据目标的变化开发爬虫程序非常方便。
  爪哇
  Java有很多解析器,对网页的解析支持非常好。缺点是网络部分支持较差。
  对于一般需求,Java 或 Python 都可以完成这项工作。如果需要模拟登录,选择Python对抗反爬虫比较方便。如果需要处理复杂的网页,解析网页内容生成结构化数据,或者需要精细解析网页内容,可以选择Java。
  
  选择 Python 作为实现爬虫的语言的主要考虑因素是:
  (1) 爬取网页本身的界面
  与其他动态脚本语言(如Perl、Shell)相比,Python的urllib2包提供了更完善的访问web文档的API;与其他静态编程语言(如Java、C#、C++)相比,Python爬取网页文档。界面更简洁。
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这时候我们就需要模拟User Agent的行为来构造合适的请求,比如模拟用户登录,模拟Session/Cookie的存储和设置。Python 中有一些优秀的第三方包可以为你做这件事,例如 Requests 或 Mechanize。
  (2) 爬取后处理
  抓取的网页通常需要进行处理,例如过滤Html标签、提取文本等。Python的Beautiful Soup提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是Python可以做到最快最干净,就像那句“人生苦短,你需要Python”一样。
  (3) 开发效率高
  因为爬虫的具体代码要根据网站进行修改,而Python灵活的脚本语言特别适合这个任务。
  (4) 快速入门
  网上有很多Python教学资源,方便大家学习,有问题也很容易找到相关资料。此外,Python 对成熟的爬虫框架也有很强的支持,比如 Scrapy。 查看全部

  java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)
  为什么用Python开发爬虫更有优势?不能用Java开发?今天小编就为大家讲解一下!
  
  C/C++
  各种搜索引擎大多使用C/C++开发爬虫,可能是因为搜索引擎爬虫重要的是采集网站信息,对页面的解析要求不高。
  Python
  Python语言具有强大的网络功能,可以模拟登录和解析JavaScript。缺点是网页解析。Python 编写程序非常方便,特别是对于专注的爬虫。目标 网站 经常更改。使用Python根据目标的变化开发爬虫程序非常方便。
  爪哇
  Java有很多解析器,对网页的解析支持非常好。缺点是网络部分支持较差。
  对于一般需求,Java 或 Python 都可以完成这项工作。如果需要模拟登录,选择Python对抗反爬虫比较方便。如果需要处理复杂的网页,解析网页内容生成结构化数据,或者需要精细解析网页内容,可以选择Java。
  
  选择 Python 作为实现爬虫的语言的主要考虑因素是:
  (1) 爬取网页本身的界面
  与其他动态脚本语言(如Perl、Shell)相比,Python的urllib2包提供了更完善的访问web文档的API;与其他静态编程语言(如Java、C#、C++)相比,Python爬取网页文档。界面更简洁。
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这时候我们就需要模拟User Agent的行为来构造合适的请求,比如模拟用户登录,模拟Session/Cookie的存储和设置。Python 中有一些优秀的第三方包可以为你做这件事,例如 Requests 或 Mechanize。
  (2) 爬取后处理
  抓取的网页通常需要进行处理,例如过滤Html标签、提取文本等。Python的Beautiful Soup提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是Python可以做到最快最干净,就像那句“人生苦短,你需要Python”一样。
  (3) 开发效率高
  因为爬虫的具体代码要根据网站进行修改,而Python灵活的脚本语言特别适合这个任务。
  (4) 快速入门
  网上有很多Python教学资源,方便大家学习,有问题也很容易找到相关资料。此外,Python 对成熟的爬虫框架也有很强的支持,比如 Scrapy。

java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-01-23 00:13 • 来自相关话题

  java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)
  最近因为需要,对用java爬取网页信息有了一点了解!
  这一次,我的任务是捕捉原创上面学生的期末考试!因为这个网页是用写的,所以有些细节我不太了解!所以我只知道一件事!因为我毕竟不是asp。
  现在让我们来看看详细的步骤吧!
  
  基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookies了解不多,所以就去查资料了!
  主要内容大概就是Session是应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成一个唯一的 SessionID,并以 SessionID 作为标识访问服务器端的 Session 存储空间。SessionID 数据保存到客户端并与 cookie 一起保存。当用户提交页面时,会将SessionID提交给服务器以访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,Session也会失效。
  此 cookie 中会话的 sessionid 值。而这个值是在用户登录的时候产生的!所以我们要模拟登录并获取这个值!
  现在来解释一下模拟登录中遇到的问题!首先我们要自己登录,观察登录界面需要传入哪些值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的评论元素。
  
  在这里我们看到了我们想要的信息!
  前三个变量不是很懂,就去看了大黄(同学,也是景红。我的目标之一!)用PHP爬取原创的课表博客
  %E5%A6%82%E4%BD%95%E6%8A%93%E5%8E%9F%E5%88%9B%E6%95%99%E5%8A%A1%E7%B3%BB%E7 %BB%9F%E7%9A%84%E8%AF%BE%E8%A1%A8/
  其中有一个链接用于描述这些参数。链接在这里
  Cbo_LX是上一页选中的“学生”!
  Txt_UserName 和 Txt_Password 是您前台传递的用户名和密码!
  而 Img_DL.x 和 Img_DL.y 应该是点击按钮时的坐标!这不是很有用!
  现在问题又来了!. . 中国人在这里!那你会不会发现过去传过来的编解码有错误!. . 测试后是真的!直接传的话是不能传到对应页面的!
  为这个问题纠结了很久!然后开始尝试不同的编码格式来改变“学生”。. . 最终问题并没有解决,反而激起了我对编解码的强烈好奇!所以在未来的日子里,我们会更加关注这方面的!下次要花一个星期研究这个!因为我上次发博客说要直播!但是我太忙了,没时间做!终于要删除这条微博了!所以下次如果有时间,就一起完成这两个吧!
  最后,我请了一位同学帮忙解决了这个问题!原来这里是设置头文件!
  
  这里的 Content-Type 没问题!
  还需要注意的是,前面提到的参数__viewstate会发生变化。这意味着每次登录都是不同的!我不明白,所以我检查了它。
  就是说这个值会根据控件的状态而变化!所以不同的用户登录方式不同!所以我们要截取这个值!每次请求获取页面后,获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。
  最后但并非最不重要的是,一件非常烦人的事情!按照页面的步骤一步步模拟!最后发现中间有些页面根本不需要模拟!. . . 行!我是智障!但是奖励还是蛮大的!
  最后是拿到数据之后。转换下一个!因为我得到的是String数据,所以必须转成json格式!于是艰苦的工作又开始了!由于对json一窍不通,终于根据demo弄明白了!目前总结了json map添加的键值对,分别对应一个对象和一个对象名!如果map的值是一个数组,那么这对应json中的一个数组!如果使用bean方法,就相当于一个对象里面有很多属性!上级最后的请求就是这样的格式!. . . 可能是我的代码不是很好!所以当我使用前两种方法时!逻辑有点乱!
  代码先上传到百度云盘。有需要的朋友可以下去看看!
  好了,今天就写到这里吧!. .
  // 八卦
  报告材料。. 今天小白真的又变成了小白
<p>import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
public class TestString {

public static void main(String[] args){
Map map = new HashMap();
List list = new ArrayList();
String[] a = new String[3];
a[0]="0";
a[1]="1";
a[2]="2";
map.put("2", a);
for(int i=0;i 查看全部

  java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)
  最近因为需要,对用java爬取网页信息有了一点了解!
  这一次,我的任务是捕捉原创上面学生的期末考试!因为这个网页是用写的,所以有些细节我不太了解!所以我只知道一件事!因为我毕竟不是asp。
  现在让我们来看看详细的步骤吧!
  
  基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookies了解不多,所以就去查资料了!
  主要内容大概就是Session是应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成一个唯一的 SessionID,并以 SessionID 作为标识访问服务器端的 Session 存储空间。SessionID 数据保存到客户端并与 cookie 一起保存。当用户提交页面时,会将SessionID提交给服务器以访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,Session也会失效。
  此 cookie 中会话的 sessionid 值。而这个值是在用户登录的时候产生的!所以我们要模拟登录并获取这个值!
  现在来解释一下模拟登录中遇到的问题!首先我们要自己登录,观察登录界面需要传入哪些值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的评论元素。
  
  在这里我们看到了我们想要的信息!
  前三个变量不是很懂,就去看了大黄(同学,也是景红。我的目标之一!)用PHP爬取原创的课表博客
  %E5%A6%82%E4%BD%95%E6%8A%93%E5%8E%9F%E5%88%9B%E6%95%99%E5%8A%A1%E7%B3%BB%E7 %BB%9F%E7%9A%84%E8%AF%BE%E8%A1%A8/
  其中有一个链接用于描述这些参数。链接在这里
  Cbo_LX是上一页选中的“学生”!
  Txt_UserName 和 Txt_Password 是您前台传递的用户名和密码!
  而 Img_DL.x 和 Img_DL.y 应该是点击按钮时的坐标!这不是很有用!
  现在问题又来了!. . 中国人在这里!那你会不会发现过去传过来的编解码有错误!. . 测试后是真的!直接传的话是不能传到对应页面的!
  为这个问题纠结了很久!然后开始尝试不同的编码格式来改变“学生”。. . 最终问题并没有解决,反而激起了我对编解码的强烈好奇!所以在未来的日子里,我们会更加关注这方面的!下次要花一个星期研究这个!因为我上次发博客说要直播!但是我太忙了,没时间做!终于要删除这条微博了!所以下次如果有时间,就一起完成这两个吧!
  最后,我请了一位同学帮忙解决了这个问题!原来这里是设置头文件!
  
  这里的 Content-Type 没问题!
  还需要注意的是,前面提到的参数__viewstate会发生变化。这意味着每次登录都是不同的!我不明白,所以我检查了它。
  就是说这个值会根据控件的状态而变化!所以不同的用户登录方式不同!所以我们要截取这个值!每次请求获取页面后,获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。
  最后但并非最不重要的是,一件非常烦人的事情!按照页面的步骤一步步模拟!最后发现中间有些页面根本不需要模拟!. . . 行!我是智障!但是奖励还是蛮大的!
  最后是拿到数据之后。转换下一个!因为我得到的是String数据,所以必须转成json格式!于是艰苦的工作又开始了!由于对json一窍不通,终于根据demo弄明白了!目前总结了json map添加的键值对,分别对应一个对象和一个对象名!如果map的值是一个数组,那么这对应json中的一个数组!如果使用bean方法,就相当于一个对象里面有很多属性!上级最后的请求就是这样的格式!. . . 可能是我的代码不是很好!所以当我使用前两种方法时!逻辑有点乱!
  代码先上传到百度云盘。有需要的朋友可以下去看看!
  好了,今天就写到这里吧!. .
  // 八卦
  报告材料。. 今天小白真的又变成了小白
<p>import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
public class TestString {

public static void main(String[] args){
Map map = new HashMap();
List list = new ArrayList();
String[] a = new String[3];
a[0]="0";
a[1]="1";
a[2]="2";
map.put("2", a);
for(int i=0;i

java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-01-22 04:01 • 来自相关话题

  java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))
  前言
  曾几何时,动态页面的信息提取(ajax、内部js二次渲染等)一直是爬虫开发者的痛点。总之,真的没有合适的工具。尤其在Java中,像htmlunit这样的工具可以算是解析动态页面的神器,但是还不够完善,无法达到浏览器级别的解析效果,遇到稍微复杂一点的页面就不行了。在经历了种种痛苦和仇恨之后,笔者决定干脆开发一款专门为爬取、监控、测试这类场景设计的动态页面渲染处理服务器。要想达到浏览器级别的效果,就必须基于浏览器内核进行开发。好在我们有开源的webkit,好在我们有QtWebkit,对开发者更加友好。
  SeimiAgent 是基于 QtWebkit 开发的可以在服务器端后台运行的 webkit 服务。它可以通过 SeimiAgent 提供的 http 接口向 SeimiAgent 发送加载请求(要加载的 URL 和该页面接受的渲染时间或使用什么代理等),通过它加载和渲染你要处理的动态页面SeimiAgent,然后将渲染好的页面直接返回给调用者进行后续处理,所以运行的SeimiAgent服务是语言无关的,任何语言或框架都可以通过SeimiAgent提供的标准http接口获取服务。SeimiAgent 的加载和渲染环境都是常见的浏览器级别的,所以不用担心他处理动态页面的能力。目前 SeimiAgent 只支持返回渲染后的 HTML 文档。将来,
  使用演示
  
  SeimiCrawler 是一个敏捷、独立部署、分布式的Java爬虫框架,希望尽可能降低新手开发高可用性能好的爬虫系统的门槛,提高爬虫系统的开发效率。在 SeimiCrawler 的世界里,大部分人只关心编写爬虫的业务逻辑,剩下的交给 Seimi 来做。在设计思路上,SeimiCrawler 很大程度上受到了 Python 的爬虫框架 Scrapy 的启发,同时融合了 Java 语言本身的特点和 Spring 的特点,希望在国内使用更高效的 XPath 来更方便、更广泛地解析 HTML,所以SeimiCrawler默认的HTML解析解析器是JsoupXpath(一个独立的扩展项目,不收录在jsoup中)。默认情况下,
  使用集成和部署 SeimiAgent
  没有列出下载和解压。上面的动态图也有演示。下载地址可以在 SeimiAgent 主页上找到。进入SeimiAgent的bin目录,执行:
  ./SeimiAgent -p 8000
  这是启动 SeimiAgent 服务,监听 8000 端口。接下来,你可以通过任何语言的 http 请求实际发送加载页面的请求,并获取渲染结果。当然,我们这里要介绍的是 SeimiCrawler 是如何集成和使用 SeimiAgent 的。
  SeimiCrawler 配置
  SeimiCrawler 在 v0.3.0 版本中内置了对 SeimiAgent 的支持。开发者只需要配置 SeimiAgent 的地址和端口,然后在生成具体的 Request 时选择是否提交给 SeimiAgent,并指定如何提交。让我们直接在评论中解释最后一个完整的例子:
  package cn.wanghaomiao.crawlers;
import cn.wanghaomiao.seimi.annotation.Crawler;
import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
import cn.wanghaomiao.seimi.struct.Request;
import cn.wanghaomiao.seimi.struct.Response;
import cn.wanghaomiao.xpath.model.JXDocument;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* 这个例子演示如何使用SeimiAgent进行复杂动态页面信息抓取
* @author 汪浩淼 et.tw@163.com
* @since 2016/4/14.
*/
@Crawler(name = "seimiagent")
public class SeimiAgentDemo extends BaseSeimiCrawler{
/**
* 在resource/config/seimi.properties中配置方便更换,当然也可以自行根据情况使用自己的统一配置中心等服务。这里配置SeimiAgent服务所在地址。
*/
@Value("${seimiAgentHost}")
private String seimiAgentHost;
//SeimiAgent监听的端口好,如上文中的8000
@Value("${seimiAgentPort}")
private int seimiAgentPort;
@Override
public String startUrls {
return new String{"https://www.baidu.com"};
}
@Override
public String seiAgentHost {
return this.seimiAgentHost;
}
@Override
public int seimiAgentPort {
return this.seimiAgentPort;
}
@Override
public void start(Response response) {
Request seimiAgentReq = Request.build("https://www.souyidai.com","getTotalTransactions")
.useSeimiAgent
// 告诉SeimiAgent针对这个请求是否使用cookie,如果没有设置使用当前Crawler关于cookie使用条件作为默认值。
//.setSeimiAgentUseCookie(true)
// 设置全部load完成后给SeimiAgent多少时间用于执行js并渲染页面,单位为毫秒
.setSeimiAgentRenderTime(5000);
push(seimiAgentReq);
}
/**
* 获取搜易贷首页总成交额
* @param response
*/
public void getTotalTransactions(Response response){
JXDocument doc = response.document;
try {
String trans = StringUtils.join(doc.sel("//div[@class='homepage-amount']/div[@class='number font-arial']/div/span/text"),"");
logger.info("Final Res:{}",trans);
} catch (Exception e) {
e.printStackTrace;
}
}
}
  配置文件 seimi.properties
  启动
  public class Boot {
public static void main(String[] args){
Seimi s = new Seimi;
s.start("seimiagent");
}
}
  SeimiCrawler 上线后,可以看到想要的搜易贷交易总量。
  完整的Demo地址 查看全部

  java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))
  前言
  曾几何时,动态页面的信息提取(ajax、内部js二次渲染等)一直是爬虫开发者的痛点。总之,真的没有合适的工具。尤其在Java中,像htmlunit这样的工具可以算是解析动态页面的神器,但是还不够完善,无法达到浏览器级别的解析效果,遇到稍微复杂一点的页面就不行了。在经历了种种痛苦和仇恨之后,笔者决定干脆开发一款专门为爬取、监控、测试这类场景设计的动态页面渲染处理服务器。要想达到浏览器级别的效果,就必须基于浏览器内核进行开发。好在我们有开源的webkit,好在我们有QtWebkit,对开发者更加友好。
  SeimiAgent 是基于 QtWebkit 开发的可以在服务器端后台运行的 webkit 服务。它可以通过 SeimiAgent 提供的 http 接口向 SeimiAgent 发送加载请求(要加载的 URL 和该页面接受的渲染时间或使用什么代理等),通过它加载和渲染你要处理的动态页面SeimiAgent,然后将渲染好的页面直接返回给调用者进行后续处理,所以运行的SeimiAgent服务是语言无关的,任何语言或框架都可以通过SeimiAgent提供的标准http接口获取服务。SeimiAgent 的加载和渲染环境都是常见的浏览器级别的,所以不用担心他处理动态页面的能力。目前 SeimiAgent 只支持返回渲染后的 HTML 文档。将来,
  使用演示
  
  SeimiCrawler 是一个敏捷、独立部署、分布式的Java爬虫框架,希望尽可能降低新手开发高可用性能好的爬虫系统的门槛,提高爬虫系统的开发效率。在 SeimiCrawler 的世界里,大部分人只关心编写爬虫的业务逻辑,剩下的交给 Seimi 来做。在设计思路上,SeimiCrawler 很大程度上受到了 Python 的爬虫框架 Scrapy 的启发,同时融合了 Java 语言本身的特点和 Spring 的特点,希望在国内使用更高效的 XPath 来更方便、更广泛地解析 HTML,所以SeimiCrawler默认的HTML解析解析器是JsoupXpath(一个独立的扩展项目,不收录在jsoup中)。默认情况下,
  使用集成和部署 SeimiAgent
  没有列出下载和解压。上面的动态图也有演示。下载地址可以在 SeimiAgent 主页上找到。进入SeimiAgent的bin目录,执行:
  ./SeimiAgent -p 8000
  这是启动 SeimiAgent 服务,监听 8000 端口。接下来,你可以通过任何语言的 http 请求实际发送加载页面的请求,并获取渲染结果。当然,我们这里要介绍的是 SeimiCrawler 是如何集成和使用 SeimiAgent 的。
  SeimiCrawler 配置
  SeimiCrawler 在 v0.3.0 版本中内置了对 SeimiAgent 的支持。开发者只需要配置 SeimiAgent 的地址和端口,然后在生成具体的 Request 时选择是否提交给 SeimiAgent,并指定如何提交。让我们直接在评论中解释最后一个完整的例子:
  package cn.wanghaomiao.crawlers;
import cn.wanghaomiao.seimi.annotation.Crawler;
import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
import cn.wanghaomiao.seimi.struct.Request;
import cn.wanghaomiao.seimi.struct.Response;
import cn.wanghaomiao.xpath.model.JXDocument;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* 这个例子演示如何使用SeimiAgent进行复杂动态页面信息抓取
* @author 汪浩淼 et.tw@163.com
* @since 2016/4/14.
*/
@Crawler(name = "seimiagent")
public class SeimiAgentDemo extends BaseSeimiCrawler{
/**
* 在resource/config/seimi.properties中配置方便更换,当然也可以自行根据情况使用自己的统一配置中心等服务。这里配置SeimiAgent服务所在地址。
*/
@Value("${seimiAgentHost}")
private String seimiAgentHost;
//SeimiAgent监听的端口好,如上文中的8000
@Value("${seimiAgentPort}")
private int seimiAgentPort;
@Override
public String startUrls {
return new String{"https://www.baidu.com"};
}
@Override
public String seiAgentHost {
return this.seimiAgentHost;
}
@Override
public int seimiAgentPort {
return this.seimiAgentPort;
}
@Override
public void start(Response response) {
Request seimiAgentReq = Request.build("https://www.souyidai.com","getTotalTransactions")
.useSeimiAgent
// 告诉SeimiAgent针对这个请求是否使用cookie,如果没有设置使用当前Crawler关于cookie使用条件作为默认值。
//.setSeimiAgentUseCookie(true)
// 设置全部load完成后给SeimiAgent多少时间用于执行js并渲染页面,单位为毫秒
.setSeimiAgentRenderTime(5000);
push(seimiAgentReq);
}
/**
* 获取搜易贷首页总成交额
* @param response
*/
public void getTotalTransactions(Response response){
JXDocument doc = response.document;
try {
String trans = StringUtils.join(doc.sel("//div[@class='homepage-amount']/div[@class='number font-arial']/div/span/text"),"");
logger.info("Final Res:{}",trans);
} catch (Exception e) {
e.printStackTrace;
}
}
}
  配置文件 seimi.properties
  启动
  public class Boot {
public static void main(String[] args){
Seimi s = new Seimi;
s.start("seimiagent");
}
}
  SeimiCrawler 上线后,可以看到想要的搜易贷交易总量。
  完整的Demo地址

java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-01-22 03:21 • 来自相关话题

  java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)
  说完一些基础知识,今天就和大家聊聊Python。
  什么是 Python?
  
  Python 是一种全栈开发语言。如果你能学好Python,你就可以把它做好,比如前端、后端、测试、大数据分析、爬虫。
  目前我不会详细介绍 Python 的流行程度。Python的作用是什么?
  Python有四个主要应用:
  网络爬虫
  网站发展
  人工智能
  自动化运维
  接下来,我们来谈谈这几个方面:
  一、网络爬虫
  第一,
  什么是网络爬虫?
  网络爬虫,又称网络蜘蛛,是指一种脚本程序,它按照一定的规则在网络上爬取想要的内容。众所周知,每个网页通常都收录其他网页的入口,网络爬虫通过一个URL依次进入其他网址,获取想要的内容。
  爬行动物有什么用?
  做垂直搜索引擎(google、baidu等)。
  科学研究:在线人类行为、在线社区进化、人类动力学研究、定量社会学、复杂网络、数据挖掘等实证研究领域需要大量数据,而网络爬虫是采集相关数据的有力工具。
  偷窥、黑客攻击、垃圾邮件……
  爬行是搜索引擎的第一步,也是最简单的一步。
  用什么语言编写爬虫?
  C、C++。高效、快速,适合一般搜索引擎爬取全网。缺点,开发慢,写起来又臭又长,例如:天网搜索源码。
  脚本语言:Perl、Python、Java、Ruby。简单易学,良好的文本处理可以方便网页内容的详细提取,但效率往往不高,适合少量网站的集中抓取
  C#?
  为什么 Python 现在最流行?
  
  就个人而言,我用 c# 和 java 编写了爬虫。差别不大,原则是用好正则表达式。只是平台问题。后来才知道很多爬虫都是用python写的,所以一发不可收拾。Python有很多优点,总结两个要点:
  1)抓取网页本身的接口
  相比其他静态编程语言,如java、c#、C++、python,爬取网页文档的界面更加简洁;与 perl、shell 等其他动态脚本语言相比,python 的 urllib2 包提供了对 web 文档更完整的访问。API。(当然红宝石也是不错的选择)
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这就是我们需要模拟用户代理的行为来构造适当的请求的地方,例如模拟用户登录,模拟会话/cookie存储和设置。python中有非常好的第三方包可以帮助你,比如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要进行处理,比如过滤html标签、提取文本等。Python的beautifulsoap提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是python可以做到最快最干净。人生苦短,你需要蟒蛇。
  二、网站发展
  开发网站需要用到哪些知识?
  1、Python基础,因为是用python开发的,所以指定python要知道,至少条件判断、循环、函数、类的知识你要知道;
  2、html和css的基础知识,因为要开发网站,网页都是用html和css写的,至少你得知道这些知识,即使你不会写前端,不能开发出特别漂亮的页面,网站,起码能看懂html标签是什么;
  3、数据库的基础知识,因为如果你开发一个网站,数据存在的地方,就在数据库中,那么你至少要知道如何对数据库进行增删改查,否则如何存储和检索数据?
  如果满足以上知识,开发一个简单的网站是没有问题的。如果要开发比较大的网站,业务逻辑比较复杂,还得用到其他的知识,比如redis、MQ等。
  三、人工智能
  人工智能(AI),简称AI。它是研究和开发用于模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的一门新技术科学。人工智能是计算机科学的一个分支,它试图理解智能的本质,并产生一种新的智能机器,它可以以类似于人类智能的方式做出反应。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能诞生以来,理论和技术日趋成熟,应用领域不断扩大。可以想象,未来人工智能带来的科技产品将是“容器”
  Python 正在成为机器学习的语言。大多数机器语言课程都是用 Python 编写的,大量大公司也使用 Python,这使许多人认为它是未来的主要编程语言。
  有人认为PYTHON效率低下,说不能支持多线程。嗯,这有点对,但是我想问一下,看这篇文章的人有多少做过搜索引擎开发?你们中有多少人正在开发具有数亿 PV 的并发 网站 开发?有多少人读过 LINUX 内核源代码?如果没有,请先学习介绍性语言。
  四、自动化运维
  Python可以满足大部分自动化运维的需求,也可以做后端C/S架构,可以使用WEB框架快速开发高级WEB界面。只有当你有能力做一个运维自动化系统的时候,你的价值才会显现出来。
  
  看完欢迎大家评论,记得关注我哦 查看全部

  java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)
  说完一些基础知识,今天就和大家聊聊Python。
  什么是 Python?
  
  Python 是一种全栈开发语言。如果你能学好Python,你就可以把它做好,比如前端、后端、测试、大数据分析、爬虫。
  目前我不会详细介绍 Python 的流行程度。Python的作用是什么?
  Python有四个主要应用:
  网络爬虫
  网站发展
  人工智能
  自动化运维
  接下来,我们来谈谈这几个方面:
  一、网络爬虫
  第一,
  什么是网络爬虫?
  网络爬虫,又称网络蜘蛛,是指一种脚本程序,它按照一定的规则在网络上爬取想要的内容。众所周知,每个网页通常都收录其他网页的入口,网络爬虫通过一个URL依次进入其他网址,获取想要的内容。
  爬行动物有什么用?
  做垂直搜索引擎(google、baidu等)。
  科学研究:在线人类行为、在线社区进化、人类动力学研究、定量社会学、复杂网络、数据挖掘等实证研究领域需要大量数据,而网络爬虫是采集相关数据的有力工具。
  偷窥、黑客攻击、垃圾邮件……
  爬行是搜索引擎的第一步,也是最简单的一步。
  用什么语言编写爬虫?
  C、C++。高效、快速,适合一般搜索引擎爬取全网。缺点,开发慢,写起来又臭又长,例如:天网搜索源码。
  脚本语言:Perl、Python、Java、Ruby。简单易学,良好的文本处理可以方便网页内容的详细提取,但效率往往不高,适合少量网站的集中抓取
  C#?
  为什么 Python 现在最流行?
  
  就个人而言,我用 c# 和 java 编写了爬虫。差别不大,原则是用好正则表达式。只是平台问题。后来才知道很多爬虫都是用python写的,所以一发不可收拾。Python有很多优点,总结两个要点:
  1)抓取网页本身的接口
  相比其他静态编程语言,如java、c#、C++、python,爬取网页文档的界面更加简洁;与 perl、shell 等其他动态脚本语言相比,python 的 urllib2 包提供了对 web 文档更完整的访问。API。(当然红宝石也是不错的选择)
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这就是我们需要模拟用户代理的行为来构造适当的请求的地方,例如模拟用户登录,模拟会话/cookie存储和设置。python中有非常好的第三方包可以帮助你,比如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要进行处理,比如过滤html标签、提取文本等。Python的beautifulsoap提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是python可以做到最快最干净。人生苦短,你需要蟒蛇。
  二、网站发展
  开发网站需要用到哪些知识?
  1、Python基础,因为是用python开发的,所以指定python要知道,至少条件判断、循环、函数、类的知识你要知道;
  2、html和css的基础知识,因为要开发网站,网页都是用html和css写的,至少你得知道这些知识,即使你不会写前端,不能开发出特别漂亮的页面,网站,起码能看懂html标签是什么;
  3、数据库的基础知识,因为如果你开发一个网站,数据存在的地方,就在数据库中,那么你至少要知道如何对数据库进行增删改查,否则如何存储和检索数据?
  如果满足以上知识,开发一个简单的网站是没有问题的。如果要开发比较大的网站,业务逻辑比较复杂,还得用到其他的知识,比如redis、MQ等。
  三、人工智能
  人工智能(AI),简称AI。它是研究和开发用于模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的一门新技术科学。人工智能是计算机科学的一个分支,它试图理解智能的本质,并产生一种新的智能机器,它可以以类似于人类智能的方式做出反应。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能诞生以来,理论和技术日趋成熟,应用领域不断扩大。可以想象,未来人工智能带来的科技产品将是“容器”
  Python 正在成为机器学习的语言。大多数机器语言课程都是用 Python 编写的,大量大公司也使用 Python,这使许多人认为它是未来的主要编程语言。
  有人认为PYTHON效率低下,说不能支持多线程。嗯,这有点对,但是我想问一下,看这篇文章的人有多少做过搜索引擎开发?你们中有多少人正在开发具有数亿 PV 的并发 网站 开发?有多少人读过 LINUX 内核源代码?如果没有,请先学习介绍性语言。
  四、自动化运维
  Python可以满足大部分自动化运维的需求,也可以做后端C/S架构,可以使用WEB框架快速开发高级WEB界面。只有当你有能力做一个运维自动化系统的时候,你的价值才会显现出来。
  
  看完欢迎大家评论,记得关注我哦

java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-01-22 03:19 • 来自相关话题

  java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)
  , 等待
  属性,对应html中的属性,例如div元素中的class、id等
  2.常用 API
  首先介绍一下获取DOM元素的api,这些都属于Element类中定义的方法。
  getElementById(String id):通过id获取元素,非常准确。
  getElementsByTag(String tag):根据标签名获取元素的集合,例如:
  <p>document.getElementsByTag("p")</p>
  会得到所有
  标签的元素方便我们进一步从中抓取想要的文字。
  getElementsByClass(String className):根据类名获取元素的集合,例如:
  <p>document.getElementsByClass("item")</p>
  将获取类为 item 的所有元素。一般页面的列表项都会指定同一个类,所以这种方法方便我们直接获取指定的列表内容。
  getElementsByAttribute(String key):根据属性名获取元素的集合,如:
  <p>document.getElementsByAttribute("href")</p>
  这样我们就可以获取到所有带有链接属性的元素,方便跳转和爬取本页面涉及的其他页面。
  获取到DOM元素后,我们还需要获取元素的属性、文本等数据,如下:
  attr(String key):获取元素中某个属性的值。例如:element.attr("class"),可以获取当前元素的class属性值。
  attributes:获取元素的所有属性。我们可以遍历或以其他方式处理所有属性。
  id、className、classNames:获取元素的id值、类值,以及所有类值的集合。这些方法的最底层是attr(String key)方法,其实是一个方便我们使用的快速实现。
  text:获取元素的全文内容。我们不必手动遍历当前元素的所有子节点来获取文本信息,该方法会直接将所有文本拼接在一起并返回。
  例如
  好了,说了这么多,是时候来一场真正的战斗了。我们以爬虫入门的经典案例和豆瓣电影Top250页面为例,看看Jsoup是如何使用的。
  
  因为只是一个例子,所以我们的目标比较简单,就是爬取这个电影名字的页面。
  首先我们直接F12查看页面源码,我们会发现电影名是一个带有类title的标签,如图:
  
  虽然有多个电影名称,但其他名称将由 / 符号分隔。于是想法来了,只要我们在这个页面上获取所有class值为title的元素,并过滤掉带有/的文本,就可以了。代码显示如下:
  <p>public static void printMovieName throws IOException {
  // 豆瓣电影Top250
  String url = "https://movie.douban.com/top250";
  // 获取页面
  Document document = Jsoup.connect(url).get;
  // 根据class获取元素集合
  Elements titles = document.getElementsByClass("title");
  int index = 1;
  for (Element title : titles) {
  String text = title.text;
  // 过滤掉电影的其他名称
  if (!text.contains("/")) {
  System.out.println("No." + index + " " + text);
  index++;
  }
  }
  }</p>
  输出如下:
  
  总结
  怎么样,用Jsoup写爬虫是不是很简单?当然,基于这个简单的例子,我们可以实现更复杂的逻辑,比如:
  对于精通 Java 语言的程序员来说,这些逻辑很容易实现。这就是为什么,我认为Java程序员如果使用自己的语言来开发爬虫,效率会更高。因为日常的搬砖操作让我们可以更熟练的处理爬取的数据。爬虫只是获取数据的一种方式,也是数据处理和使用中非常重要的一环。
  提醒:我们必须合法使用爬行动物。通过网站域名+robots.txt查看爬虫协议,判断是否可以使用爬虫爬取信息,如:. 同时,切记不要爬取敏感信息,牟取暴利!
  好了,今天大叔的分享就到这里。公众号后台回复“爬虫”即可获取项目源码地址。看完文章,抓紧时间试一试吧。
  问你能有多少烦恼,开源项目解决万千烦恼,下期见! 查看全部

  java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)
  , 等待
  属性,对应html中的属性,例如div元素中的class、id等
  2.常用 API
  首先介绍一下获取DOM元素的api,这些都属于Element类中定义的方法。
  getElementById(String id):通过id获取元素,非常准确。
  getElementsByTag(String tag):根据标签名获取元素的集合,例如:
  <p>document.getElementsByTag("p")</p>
  会得到所有
  标签的元素方便我们进一步从中抓取想要的文字。
  getElementsByClass(String className):根据类名获取元素的集合,例如:
  <p>document.getElementsByClass("item")</p>
  将获取类为 item 的所有元素。一般页面的列表项都会指定同一个类,所以这种方法方便我们直接获取指定的列表内容。
  getElementsByAttribute(String key):根据属性名获取元素的集合,如:
  <p>document.getElementsByAttribute("href")</p>
  这样我们就可以获取到所有带有链接属性的元素,方便跳转和爬取本页面涉及的其他页面。
  获取到DOM元素后,我们还需要获取元素的属性、文本等数据,如下:
  attr(String key):获取元素中某个属性的值。例如:element.attr("class"),可以获取当前元素的class属性值。
  attributes:获取元素的所有属性。我们可以遍历或以其他方式处理所有属性。
  id、className、classNames:获取元素的id值、类值,以及所有类值的集合。这些方法的最底层是attr(String key)方法,其实是一个方便我们使用的快速实现。
  text:获取元素的全文内容。我们不必手动遍历当前元素的所有子节点来获取文本信息,该方法会直接将所有文本拼接在一起并返回。
  例如
  好了,说了这么多,是时候来一场真正的战斗了。我们以爬虫入门的经典案例和豆瓣电影Top250页面为例,看看Jsoup是如何使用的。
  
  因为只是一个例子,所以我们的目标比较简单,就是爬取这个电影名字的页面。
  首先我们直接F12查看页面源码,我们会发现电影名是一个带有类title的标签,如图:
  
  虽然有多个电影名称,但其他名称将由 / 符号分隔。于是想法来了,只要我们在这个页面上获取所有class值为title的元素,并过滤掉带有/的文本,就可以了。代码显示如下:
  <p>public static void printMovieName throws IOException {
  // 豆瓣电影Top250
  String url = "https://movie.douban.com/top250";
  // 获取页面
  Document document = Jsoup.connect(url).get;
  // 根据class获取元素集合
  Elements titles = document.getElementsByClass("title");
  int index = 1;
  for (Element title : titles) {
  String text = title.text;
  // 过滤掉电影的其他名称
  if (!text.contains("/")) {
  System.out.println("No." + index + " " + text);
  index++;
  }
  }
  }</p>
  输出如下:
  
  总结
  怎么样,用Jsoup写爬虫是不是很简单?当然,基于这个简单的例子,我们可以实现更复杂的逻辑,比如:
  对于精通 Java 语言的程序员来说,这些逻辑很容易实现。这就是为什么,我认为Java程序员如果使用自己的语言来开发爬虫,效率会更高。因为日常的搬砖操作让我们可以更熟练的处理爬取的数据。爬虫只是获取数据的一种方式,也是数据处理和使用中非常重要的一环。
  提醒:我们必须合法使用爬行动物。通过网站域名+robots.txt查看爬虫协议,判断是否可以使用爬虫爬取信息,如:. 同时,切记不要爬取敏感信息,牟取暴利!
  好了,今天大叔的分享就到这里。公众号后台回复“爬虫”即可获取项目源码地址。看完文章,抓紧时间试一试吧。
  问你能有多少烦恼,开源项目解决万千烦恼,下期见!

java抓取网页内容( JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-03-18 06:12 • 来自相关话题

  java抓取网页内容(
JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)
  java爬虫Gecco工具抓取新闻实例
  更新时间:2016年10月28日11:11:19 作者:赵霞客
  本文文章主要介绍JAVA爬虫Gecco工具抓取新闻的例子,有一定的参考价值,感兴趣的朋友可以参考一下。
  最近看到Gecoo爬虫工具,感觉还是比较简单好用的。都写个DEMO测试,抓起来。网站
  ,主要是抓取新闻的标题和发布时间作为抓取的测试对象。通过选择像 Jquery 选择器这样的节点来抓取 HTML 节点非常方便。 Gecco代码主要使用注解来实现URL匹配,看起来更加简洁美观。
  添加 Maven 依赖
  
com.geccocrawler
gecco
1.0.8
  编写爬取列表页面
  @Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {
@Request
private HttpRequest request;
@RequestParameter
private int pageIndex;
@RequestParameter
private int pageSize;
@HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")
private List newList;
}
  @PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline {
public void process(ZJNewsGeccoList zjNewsGeccoList) {
HttpRequest request=zjNewsGeccoList.getRequest();
for (HrefBean bean:zjNewsGeccoList.getNewList()){
//进入祥情页面抓取
SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));
}
int page=zjNewsGeccoList.getPageIndex()+1;
String nextUrl = "http://zj.zjol.com.cn/home.htm ... 3B%3B
//抓取下一页
SchedulerContext.into(request.subRequest(nextUrl));
}
}
  写爬吉祥页
  @Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {
@Text
@HtmlField(cssPath = "#headline")
private String title ;
@Text
@HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")
private String createTime;
}
  @PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline {
public void process(ZJNewsDetail zjNewsDetail) {
System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());
}
}
  启动主函数
  public class Main {
public static void main(String [] rags){
GeccoEngine.create()
//工程的包路径
.classpath("com.zhaochao.gecco.zj")
//开始抓取的页面地址
.start("http://zj.zjol.com.cn/home.htm ... 6quot;)
//开启几个爬虫线程
.thread(10)
//单个爬虫每次抓取完一个请求后的间隔时间
.interval(10)
//使用pc端userAgent
.mobile(false)
//开始运行
.run();
}
}
  获取结果
  
  
  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 查看全部

  java抓取网页内容(
JAVA爬虫Gecco工具抓取新闻实例,具有一定的参考价值工具)
  java爬虫Gecco工具抓取新闻实例
  更新时间:2016年10月28日11:11:19 作者:赵霞客
  本文文章主要介绍JAVA爬虫Gecco工具抓取新闻的例子,有一定的参考价值,感兴趣的朋友可以参考一下。
  最近看到Gecoo爬虫工具,感觉还是比较简单好用的。都写个DEMO测试,抓起来。网站
  ,主要是抓取新闻的标题和发布时间作为抓取的测试对象。通过选择像 Jquery 选择器这样的节点来抓取 HTML 节点非常方便。 Gecco代码主要使用注解来实现URL匹配,看起来更加简洁美观。
  添加 Maven 依赖
  
com.geccocrawler
gecco
1.0.8
  编写爬取列表页面
  @Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {
@Request
private HttpRequest request;
@RequestParameter
private int pageIndex;
@RequestParameter
private int pageSize;
@HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")
private List newList;
}
  @PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline {
public void process(ZJNewsGeccoList zjNewsGeccoList) {
HttpRequest request=zjNewsGeccoList.getRequest();
for (HrefBean bean:zjNewsGeccoList.getNewList()){
//进入祥情页面抓取
SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));
}
int page=zjNewsGeccoList.getPageIndex()+1;
String nextUrl = "http://zj.zjol.com.cn/home.htm ... 3B%3B
//抓取下一页
SchedulerContext.into(request.subRequest(nextUrl));
}
}
  写爬吉祥页
  @Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {
@Text
@HtmlField(cssPath = "#headline")
private String title ;
@Text
@HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")
private String createTime;
}
  @PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline {
public void process(ZJNewsDetail zjNewsDetail) {
System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());
}
}
  启动主函数
  public class Main {
public static void main(String [] rags){
GeccoEngine.create()
//工程的包路径
.classpath("com.zhaochao.gecco.zj")
//开始抓取的页面地址
.start("http://zj.zjol.com.cn/home.htm ... 6quot;)
//开启几个爬虫线程
.thread(10)
//单个爬虫每次抓取完一个请求后的间隔时间
.interval(10)
//使用pc端userAgent
.mobile(false)
//开始运行
.run();
}
}
  获取结果
  
  
  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-03-15 00:10 • 来自相关话题

  java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)
  java抓取网页内容教程教你java抓取网页内容之前,先强调一下,只有两种方法,第一种是重定向,就是net.url.redirect()把网页的源代码反馈给你,然后获取源代码,具体的分析请查看下面这篇教程,都是类的分析,有比较详细的讲解。java抓取网页内容教程-524个网页,200万数据分析的分享.html。
  如何根据分类抓取网页内容首先我们要确定我们要抓取的是标题、关键词还是url。只需要确定这三个就可以了,先找一个类,然后针对一个类做点操作就好。上面展示的都是分类抓取,我们在抓取第一个抓取关键词。1.获取分类的url2.对url的语句重定向,再把语句拉到新目录下面for循环。等语句完成就生成所需要的代码。第一步分析展示图如下下面是类的分析展示图如下。
  哥们你最后用的什么方法呢?我最近也遇到这个问题,抓取数据都有,每天都要搜索,今天抓取了6600万的数据。有什么办法好呢,自己抓取过程中碰到的问题,
  这是一个功能比较全面的网站哦,里面抓取了各个时段各个地区的消息,你可以看看我们日常已经爬取了哪些内容,欢迎交流哦。es文本处理爬虫之前要先安装爬虫相关的工具,然后就是获取网站的代码了。推荐直接百度,并按照这个教程一步步进行学习。 查看全部

  java抓取网页内容(java抓取网页内容教程教你如何根据分类抓取数据之前)
  java抓取网页内容教程教你java抓取网页内容之前,先强调一下,只有两种方法,第一种是重定向,就是net.url.redirect()把网页的源代码反馈给你,然后获取源代码,具体的分析请查看下面这篇教程,都是类的分析,有比较详细的讲解。java抓取网页内容教程-524个网页,200万数据分析的分享.html。
  如何根据分类抓取网页内容首先我们要确定我们要抓取的是标题、关键词还是url。只需要确定这三个就可以了,先找一个类,然后针对一个类做点操作就好。上面展示的都是分类抓取,我们在抓取第一个抓取关键词。1.获取分类的url2.对url的语句重定向,再把语句拉到新目录下面for循环。等语句完成就生成所需要的代码。第一步分析展示图如下下面是类的分析展示图如下。
  哥们你最后用的什么方法呢?我最近也遇到这个问题,抓取数据都有,每天都要搜索,今天抓取了6600万的数据。有什么办法好呢,自己抓取过程中碰到的问题,
  这是一个功能比较全面的网站哦,里面抓取了各个时段各个地区的消息,你可以看看我们日常已经爬取了哪些内容,欢迎交流哦。es文本处理爬虫之前要先安装爬虫相关的工具,然后就是获取网站的代码了。推荐直接百度,并按照这个教程一步步进行学习。

java抓取网页内容(PS教程-PS制作远程服务器制作教程)

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-03-11 07:24 • 来自相关话题

  java抓取网页内容(PS教程-PS制作远程服务器制作教程)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != &#39;\"&#39;);j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助。同时希望能多支持ASPKU源码库!
  注:请移步JAVA教程频道阅读相关教程知识。 查看全部

  java抓取网页内容(PS教程-PS制作远程服务器制作教程)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != &#39;\"&#39;);j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助。同时希望能多支持ASPKU源码库!
  注:请移步JAVA教程频道阅读相关教程知识。

java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-03-10 21:01 • 来自相关话题

  java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
<p> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; /** * Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //储存返回结果 private LinkedHashMap mapOfBaike; //获取搜索信息 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通过网络链接获取信息 private static LinkedHashMap getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索词条的节点 String startNode = ""; //词条的链接关键字 String keyOfHref = "href=\""; //词条的标题关键字 String keyOfTitle = "target=\"_blank\">"; String endNode = ""; boolean isNode = false; String title; String href; String rLine; LinkedHashMap keyMap = new LinkedHashMap(); //开始网络请求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取网页内容 while ((rLine = bufferedReader.readLine()) != null){ //判断目标节点是否出现 if(rLine.contains(startNode)){ isNode = true; } //若目标节点出现,则开始抓取数据 if (isNode){ //若目标结束节点出现,则结束读取,节省读取时间 if (rLine.contains(endNode)) { //关闭读取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值为空则不读取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //获取词条对应的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //获取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j 查看全部

  java抓取网页内容(java利用url实现网页内容抓取的示例。。具有很好的参考价值)
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
<p> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; /** * Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //储存返回结果 private LinkedHashMap mapOfBaike; //获取搜索信息 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通过网络链接获取信息 private static LinkedHashMap getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索词条的节点 String startNode = ""; //词条的链接关键字 String keyOfHref = "href=\""; //词条的标题关键字 String keyOfTitle = "target=\"_blank\">"; String endNode = ""; boolean isNode = false; String title; String href; String rLine; LinkedHashMap keyMap = new LinkedHashMap(); //开始网络请求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取网页内容 while ((rLine = bufferedReader.readLine()) != null){ //判断目标节点是否出现 if(rLine.contains(startNode)){ isNode = true; } //若目标节点出现,则开始抓取数据 if (isNode){ //若目标结束节点出现,则结束读取,节省读取时间 if (rLine.contains(endNode)) { //关闭读取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值为空则不读取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //获取词条对应的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //获取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j

java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-03-10 21:01 • 来自相关话题

  java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)
  想了解JAVA使用爬虫爬取网站网页内容的方法,fzhlee会为大家讲解JAVA使用爬虫爬取网站网页内容的相关知识和代码示例这篇文章,欢迎阅读指正,我们先关注一下:JAVA,爬虫,爬取,网页内容,一起来学习吧。
  本文的例子描述了JAVA使用爬虫爬取网站网页内容的方法。分享给大家,供大家参考。详情如下:
  最近在用JAVA研究爬网,呵呵,进门了,和大家分享一下我的经验
  提供了以下两种方法,一种是使用apache提供的包。另一种是使用JAVA自带的。
  代码如下:
<p>
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength 查看全部

  java抓取网页内容(想了解JAVA使用爬虫抓取网站网页内容的方法的相关内容吗)
  想了解JAVA使用爬虫爬取网站网页内容的方法,fzhlee会为大家讲解JAVA使用爬虫爬取网站网页内容的相关知识和代码示例这篇文章,欢迎阅读指正,我们先关注一下:JAVA,爬虫,爬取,网页内容,一起来学习吧。
  本文的例子描述了JAVA使用爬虫爬取网站网页内容的方法。分享给大家,供大家参考。详情如下:
  最近在用JAVA研究爬网,呵呵,进门了,和大家分享一下我的经验
  提供了以下两种方法,一种是使用apache提供的包。另一种是使用JAVA自带的。
  代码如下:
<p>
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength

java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)

网站优化优采云 发表了文章 • 0 个评论 • 289 次浏览 • 2022-03-07 10:03 • 来自相关话题

  java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)
  java抓取网页内容常用的几种办法在网上下载大数据接口java代码,对其页面进行抓取,如微信公众号文章等。如果抓取手机官网上所有的商品,那么复杂的爬虫代码将变得不可行。所以,一般做文章分析,所抓取的网页都是局部的,所以不会存在复杂的request请求,也是相对简单的。一、无需爬虫抓取文章分析首先,我们可以通过官网拿到搜索的相关商品列表信息,这些信息是java最主要功能需求来源。
  然后我们可以用java来分析页面传递的商品列表并进行数据分析。接下来我们用java抓取文章的分析页面地址,但是分析页面地址是异步请求,需要客户端等待服务器响应后才能进行抓取。我们只抓取首页商品列表页的数据,直接到网页底部,可以通过f12进行调试。点击图片放大查看列表页将页面中的数据抓取下来,我们点击回首页分析。
  点击图片放大查看最近三次用户点击商品列表数据3.点击回首页分析。点击图片放大查看4.点击用户列表分析,点击图片放大查看5.点击用户列表分析,点击图片放大查看这样我们就可以找到传递给我们网页的数据了,用java也是能够完成的。如果这样做还是不能完成,还需要下面的命令。6.点击图片放大查看命令传递给我们的数据。
  从以上查看可以看出,我们总共抓取了8万多条数据。那么我们在分析数据的时候应该如何去处理呢?我们首先是要构建html源代码,下面以实现github爬虫为例子,构建静态页面的html源代码首先我们知道github是域名。为方便自己以及项目打包和发布,我们知道,github是阿里云的域名,如果我们抓取的网站是公司的,那么数据请求的时候其实对应的是公司的域名。
  如果我们的网站是iaas服务,那么数据请求都需要iaas域名。还有其他服务,以及分析数据也是需要iaas域名。打包发布其实也需要iaas域名,上面通过的命令可以发现,我们已经抓取到数据了,但是没有一个相应的html源代码文件,这个一般会存在网站服务器上。这个时候就需要构建一个文件系统,我们会发现服务器端也可以文件系统,我们只要修改相应的数据库的地址就可以成功创建。
  那么我们根据上述构建html源代码的步骤,先构建html源代码文件。然后直接发布到数据库。然后我们打开抓取到的数据,数据来源如何?一般我们抓取到的数据来源如下:电影院,电影院的排名,星级高低排名到影院排名,票房排名,购票排名,位置商圈排名,商圈交通信息,配套商圈消费水平排名到公交车站,公交车站的排名到公交车站的排名,公交车站的排名到公交车站的排名到路线排名,路线排名到公交车站的。 查看全部

  java抓取网页内容(java抓取网页内容常用的几种办法在网上下载大数据接口java代码)
  java抓取网页内容常用的几种办法在网上下载大数据接口java代码,对其页面进行抓取,如微信公众号文章等。如果抓取手机官网上所有的商品,那么复杂的爬虫代码将变得不可行。所以,一般做文章分析,所抓取的网页都是局部的,所以不会存在复杂的request请求,也是相对简单的。一、无需爬虫抓取文章分析首先,我们可以通过官网拿到搜索的相关商品列表信息,这些信息是java最主要功能需求来源。
  然后我们可以用java来分析页面传递的商品列表并进行数据分析。接下来我们用java抓取文章的分析页面地址,但是分析页面地址是异步请求,需要客户端等待服务器响应后才能进行抓取。我们只抓取首页商品列表页的数据,直接到网页底部,可以通过f12进行调试。点击图片放大查看列表页将页面中的数据抓取下来,我们点击回首页分析。
  点击图片放大查看最近三次用户点击商品列表数据3.点击回首页分析。点击图片放大查看4.点击用户列表分析,点击图片放大查看5.点击用户列表分析,点击图片放大查看这样我们就可以找到传递给我们网页的数据了,用java也是能够完成的。如果这样做还是不能完成,还需要下面的命令。6.点击图片放大查看命令传递给我们的数据。
  从以上查看可以看出,我们总共抓取了8万多条数据。那么我们在分析数据的时候应该如何去处理呢?我们首先是要构建html源代码,下面以实现github爬虫为例子,构建静态页面的html源代码首先我们知道github是域名。为方便自己以及项目打包和发布,我们知道,github是阿里云的域名,如果我们抓取的网站是公司的,那么数据请求的时候其实对应的是公司的域名。
  如果我们的网站是iaas服务,那么数据请求都需要iaas域名。还有其他服务,以及分析数据也是需要iaas域名。打包发布其实也需要iaas域名,上面通过的命令可以发现,我们已经抓取到数据了,但是没有一个相应的html源代码文件,这个一般会存在网站服务器上。这个时候就需要构建一个文件系统,我们会发现服务器端也可以文件系统,我们只要修改相应的数据库的地址就可以成功创建。
  那么我们根据上述构建html源代码的步骤,先构建html源代码文件。然后直接发布到数据库。然后我们打开抓取到的数据,数据来源如何?一般我们抓取到的数据来源如下:电影院,电影院的排名,星级高低排名到影院排名,票房排名,购票排名,位置商圈排名,商圈交通信息,配套商圈消费水平排名到公交车站,公交车站的排名到公交车站的排名,公交车站的排名到公交车站的排名到路线排名,路线排名到公交车站的。

java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-03-01 14:07 • 来自相关话题

  java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
  通过JAVA API,可以成功抓取网络上大部分的指定网页内容。下面就和大家分享一下对这种方法的理解和体会。最简单的抓取方法是:
  URL url = new URL(myurl);
BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
i++;
sb.append(s+"\r\n");
}
  这种方法爬一般的网页应该是没问题的,但是当一些网页中有嵌套的重定向连接时,会报Server redirected too many times之类的错误,这是因为这个网页里面有一些代码是转到其他网页,太多的循环导致程序错误。如果只想爬取这个URL中的网页内容,不想跳转到其他网页,可以使用下面的代码。
  URL urlmy = new URL(myurl);
HttpURLConnection con = (HttpURLConnection) urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
con.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s+"\r\n");
}
  这样,在爬取的时候,程序就不会跳转到其他页面去爬取其他内容,就达到了我们的目的。
  如果我们在 Intranet 中,我们还需要为其添加代理。Java 提供对具有特殊系统属性的代理服务器的支持,只要在上述程序中添加以下程序即可。
  System.getProperties().setProperty( "http.proxyHost", proxyName );
System.getProperties().setProperty( "http.proxyPort", port );
  这样,您就可以在内网的同时从Internet上抓取您想要的东西。
  上面程序捕捉到的所有内容都存储在sb字符串中,我们可以通过正则表达式进行分析,提取出我们想要的具体内容,给我用,呵呵,这是多么美妙的一件事啊!! 查看全部

  java抓取网页内容(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
  通过JAVA API,可以成功抓取网络上大部分的指定网页内容。下面就和大家分享一下对这种方法的理解和体会。最简单的抓取方法是:
  URL url = new URL(myurl);
BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
i++;
sb.append(s+"\r\n");
}
  这种方法爬一般的网页应该是没问题的,但是当一些网页中有嵌套的重定向连接时,会报Server redirected too many times之类的错误,这是因为这个网页里面有一些代码是转到其他网页,太多的循环导致程序错误。如果只想爬取这个URL中的网页内容,不想跳转到其他网页,可以使用下面的代码。
  URL urlmy = new URL(myurl);
HttpURLConnection con = (HttpURLConnection) urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
con.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s+"\r\n");
}
  这样,在爬取的时候,程序就不会跳转到其他页面去爬取其他内容,就达到了我们的目的。
  如果我们在 Intranet 中,我们还需要为其添加代理。Java 提供对具有特殊系统属性的代理服务器的支持,只要在上述程序中添加以下程序即可。
  System.getProperties().setProperty( "http.proxyHost", proxyName );
System.getProperties().setProperty( "http.proxyPort", port );
  这样,您就可以在内网的同时从Internet上抓取您想要的东西。
  上面程序捕捉到的所有内容都存储在sb字符串中,我们可以通过正则表达式进行分析,提取出我们想要的具体内容,给我用,呵呵,这是多么美妙的一件事啊!!

java抓取网页内容( 2017年03月13日java利用url实现网页内容抓取的示例)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2022-02-23 21:20 • 来自相关话题

  java抓取网页内容(
2017年03月13日java利用url实现网页内容抓取的示例)
  Java使用url抓取网页内容
  更新时间:2017-03-13 09:42:31 作者:zangcunmiao
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望对脚本之家的支持! 查看全部

  java抓取网页内容(
2017年03月13日java利用url实现网页内容抓取的示例)
  Java使用url抓取网页内容
  更新时间:2017-03-13 09:42:31 作者:zangcunmiao
  本文主要介绍java使用url实现网页内容爬取的例子。有很好的参考价值。下面就和小编一起来看看吧
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望对脚本之家的支持!

java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-02-14 21:21 • 来自相关话题

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载! 查看全部

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载!

java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-02-09 20:06 • 来自相关话题

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页的源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载! 查看全部

  java抓取网页内容(本文就用Java给大家演示怎样抓取站点的数据:(1))
  原文链接:
  有时出于各种原因,我们需要从某个站点采集数据,但是因为不同站点显示数据的方式略有不同!
  本文使用Java为大家展示如何抓取网站的数据:(1)抓取原创网页数据;(2)抓取网页Javascript返回的数据。
  一、获取原创网页。
  在这个例子中,我们将从上面获取 ip 查询的结果:
  第一步:打开这个网页,然后输入IP:111.142.55.73,点击查询按钮,可以看到网页上显示的结果:
  
  第二步:查看网页的源码,我们看到源码中有这么一段:
  
  由此可以看出,再次请求网页后,才显示查询结果。
  看看查询后的网页地址:
  
  也就是说,我们只有通过访问这样的URL才能得到ip查询的结果。接下来看代码:
  public void captureHtml(String ip) throws Exception {
String strURL = "http://ip.chinaz.com/?IP=" + ip;
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
String buf = contentBuf.toString();
int beginIx = buf.indexOf("查询结果[");
int endIx = buf.indexOf("上面四项依次显示的是");
String result = buf.substring(beginIx, endIx);
System.out.println("captureHtml()的结果:\n" + result);
}
  使用HttpURLConnection连接网站,使用bufReader保存网页返回的数据,然后通过自定义解析方式显示结果。
  这里我只是随便解析了一下。如果解析非常准确,需要我自己处理。
  解析结果如下:
  captureHtml() 的结果:
  查询结果[1]:111.142.55.73 ==&gt;&gt; 1871591241 ==&gt;&gt; 福建漳州移动
  二、获取网页 JavaScript 返回的结果。
  有时网站为了保护自己的数据,不会直接在网页的源码中返回数据,而是采用异步的方式用JS返回数据,这样可以避免工具对网站数据的抓取比如搜索引擎。
  先看看这个页面:
  
  第一种方式查看网页源代码,但是没有找到运单的跟踪信息,因为它是通过JS的方式获取结果的。
  但是有时候我们非常需要获取JS数据,这个时候我们应该怎么做呢?
  这时候我们就需要用到一个工具:HTTP Analyzer,这个工具可以截取Http的交互内容,我们利用这个工具来达到我们的目的。
  先点击开始按钮后,开始监听网页的交互行为。
  我们打开网页:,可以看到HTTP Analyzer列出了网页的所有请求数据和结果:
  
  为了更方便的查看JS的结果,我们先清除数据,然后在网页中输入快递号码:7,点击查询按钮,然后查看HTTP Analyzer的结果:
  
  这是点击查询按钮后HTTP Analyzer的结果,我们继续查看:
  
  
  从上面两张图可以看出,HTTP Analyzer可以截取JS返回的数据并显示在Response Content中,同时可以看到JS请求的网页地址。
  这种情况下,我们只需要分析HTTP Analyzer的结果,然后模拟JS的行为来获取数据,也就是我们只需要访问JS请求的网页地址就可以获取数据,当然前提是就是数据没有加密,我们记下JS请求的URL:
  然后让程序请求这个网页的结果!
  这是代码:
  public void captureJavascript(String postid) throws Exception {
String strURL = "http://www.kiees.cn/sf.php?wen=" + postid
+ "&channel=&rnd=0";
URL url = new URL(strURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader input = new InputStreamReader(httpConn
.getInputStream(), "utf-8");
BufferedReader bufReader = new BufferedReader(input);
String line = "";
StringBuilder contentBuf = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
contentBuf.append(line);
}
System.out.println("captureJavascript()的结果:\n" + contentBuf.toString());
}
  可以看到,爬取JS的方法和之前爬取原创网页的代码完全一样,只是做了一个解析JS的过程。
  下面是运行程序的结果:
  captureJavascript() 的结果:
  运单跟踪信息 [7]
  这些数据就是JS返回的结果,达到了我们的目的!
  希望这篇文章可以对需要的朋友有所帮助。如需程序源代码,请点击这里下载!

java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-02-06 04:23 • 来自相关话题

  java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)
  前几天,我女朋友在网上看了一本电子书,想下载,但是那个网站只能支持在线阅读,不能下载,还好可以复制粘贴。
  于是复制粘贴的任务就交给了我。我查看了 网站 网址。单个文章的html源码非常简单。作为程序员,如何反复复制粘贴? ?
  所以有了这段代码,还是比较简单的:
<p>
package WEB;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网页抓取
* @author 胡阳
* @blog http://www.the5fire.com
*
*/
public class WebGet {
private String myUrl;
private HttpURLConnection con;
private StringBuilder contextAll = new StringBuilder("");
private int pageCount = 0;
private String pageType = "";
public WebGet() {
}
public WebGet(String url) {
this.myUrl = url;
}
public WebGet(String url,int pageCount,String pageType) {
this.myUrl = url;
this.pageCount = pageCount;
this.pageType = pageType;
}
/**
* 正则表达式
* */
public String regex() {
String googleRegex = " 查看全部

  java抓取网页内容(前几天女友在网上看了一本电子书怎么可以重复的复制粘贴呢?)
  前几天,我女朋友在网上看了一本电子书,想下载,但是那个网站只能支持在线阅读,不能下载,还好可以复制粘贴。
  于是复制粘贴的任务就交给了我。我查看了 网站 网址。单个文章的html源码非常简单。作为程序员,如何反复复制粘贴? ?
  所以有了这段代码,还是比较简单的:
<p>
package WEB;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网页抓取
* @author 胡阳
* @blog http://www.the5fire.com
*
*/
public class WebGet {
private String myUrl;
private HttpURLConnection con;
private StringBuilder contextAll = new StringBuilder("");
private int pageCount = 0;
private String pageType = "";
public WebGet() {
}
public WebGet(String url) {
this.myUrl = url;
}
public WebGet(String url,int pageCount,String pageType) {
this.myUrl = url;
this.pageCount = pageCount;
this.pageType = pageType;
}
/**
* 正则表达式
* */
public String regex() {
String googleRegex = "

java抓取网页内容( java多线程获取铃声的json数据()(图) )

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-02-03 02:08 • 来自相关话题

  java抓取网页内容(
java多线程获取铃声的json数据()(图)
)
  java多线程抓取铃声官网的铃声数据
  更新时间:2016-04-28 11:50:47 作者:bobo_ll
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据。通过解析json数据可以看到有{"hasmore":1,"curpage":1}等指令,通过判断hasmore的值来决定是否取下一页。但是上面链接返回的json没有铃声的下载地址
  我一直想练习java多线程来获取数据。
  有一天我发现Ringtones()的官网有很多数据。
  通过观察它们的前端来获取铃声数据的ajax
  
  {类别 ID}&amp;page={分页符页码}
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据,通过解析json数据,
  可以看到有{"hasmore":1,"curpage":1}这样的指令。通过判断hasmore的值,决定是否爬取下一页。
  但是上面链接返回的json没有铃声的下载地址
  你很快就会发现,点击页面上的“下载”,你会看到
  通过以下请求,可以得到铃声的下载地址
  {铃声ID}
  
  因此,他们的数据很容易被窃取。于是我开始...
  源代码已发布在 github 上。如果您对童鞋感兴趣,可以查看
  github:
  以上代码:
  
package me.yongbo.DuoduoRingRobot;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
/* * @author yongbo_ * @created 2013/4/16 * * */
public class DuoduoRingRobotClient implements Runnable {
public static String GET_RINGINFO_URL = "http://www.shoujiduoduo.com/ri ... D%251$d&page=%2$d";
public static String GET_DOWN_URL = "http://www.shoujiduoduo.com/ri ... D%251$d";
public static String ERROR_MSG = "listId为 %1$d 的Robot发生错误,已自动停止。当前page为 %2$d";public static String STATUS_MSG = "开始抓取数据,当前listId: %1$d,当前page: %2$d";
public static String FILE_DIR = "E:/RingData/";public static String FILE_NAME = "listId=%1$d.txt";private boolean errorFlag = false;private int listId;private int page;
private int endPage = -1;private int hasMore = 1;
private DbHelper dbHelper;
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * @param endPage 结束页码 * */
public DuoduoRingRobotClient(int listId, int beginPage, int endPage)
{this.listId = listId;this.page = beginPage;this.endPage = endPage;this.dbHelper = new DbHelper();}
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * */
public DuoduoRingRobotClient(int listId, int page) {this(listId, page, -1);}
/** * 获取铃声 * */public void getRings() {String url = String.format(GET_RINGINFO_URL, listId, page);String responseStr = httpGet(url);hasMore = getHasmore(responseStr);
page = getNextPage(responseStr);
ringParse(responseStr.replaceAll("\\{\"hasmore\":[0-9]*,\"curpage\":[0-9]*\\},", "").replaceAll(",]", "]"));}/** * 发起http请求 * @param webUrl 请求连接地址 * */public String httpGet(String webUrl){URL url;URLConnection conn;StringBuilder sb = new StringBuilder();String resultStr = "";try {url = new URL(webUrl);conn = url.openConnection();conn.connect();InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader bufReader = new BufferedReader(isr);String lineText;while ((lineText = bufReader.readLine()) != null) {sb.append(lineText);}resultStr = sb.toString();} catch (Exception e) {errorFlag = true;//将错误写入txtwriteToFile(String.format(ERROR_MSG, listId, page));}return resultStr;}/** * 将json字符串转化成Ring对象,并存入txt中 * @param json Json字符串 * */public void ringParse(String json) {Ring ring = null;JsonElement element = new JsonParser().parse(json);JsonArray array = element.getAsJsonArray();// 遍历数组Iterator it = array.iterator();
Gson gson = new Gson();while (it.hasNext() && !errorFlag) {JsonElement e = it.next();// JsonElement转换为JavaBean对象ring = gson.fromJson(e, Ring.class);ring.setDownUrl(getRingDownUrl(ring.getId()));if(isAvailableRing(ring)) {System.out.println(ring.toString());
//可选择写入数据库还是写入文本//writeToFile(ring.toString());writeToDatabase(ring);}}}
/** * 写入txt * @param data 字符串 * */public void writeToFile(String data)
{String path = FILE_DIR + String.format(FILE_NAME, listId);File dir = new File(FILE_DIR);File file = new File(path);FileWriter fw = null;if(!dir.exists()){dir.mkdirs();
}try {if(!file.exists()){file.createNewFile();}fw = new FileWriter(file, true);
fw.write(data);fw.write("\r\n");fw.flush();} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}finally {try {if(fw != null){fw.close();}} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 写入数据库 * @param ring 一个Ring的实例 * */
public void writeToDatabase(Ring ring) {dbHelper.execute("addRing", ring);}
@Overridepublic void run() {while(hasMore == 1 && !errorFlag){if(endPage != -1){if(page > endPage) { break; }}System.out.println(String.format(STATUS_MSG, listId, page));
getRings();System.out.println(String.format("该页数据写入完成"));}System.out.println("ending...");}
private int getHasmore(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");
Matcher match = p.matcher(resultStr);
if (match.find()) { return Integer.parseInt(match.group(1));
} return 0;
}
private int getNextPage(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");Matcher match = p.matcher(resultStr);if (match.find()) {return Integer.parseInt(match.group(2));}return 0;}
/** * 判断当前Ring是否满足条件。当Ring的name大于50个字符或是duration为小数则不符合条件,将被剔除。 * @param ring 当前Ring对象实例 * */private boolean isAvailableRing(Ring ring){Pattern p = Pattern.compile("^[1-9][0-9]*$");
Matcher match = p.matcher(ring.getDuration());
if(!match.find()){return false;}if(ring.getName().length() > 50 || ring.getArtist().length() > 50 || ring.getDownUrl().length() == 0){return false;}return true;}
/** * 获取铃声的下载地址 * @param rid 铃声的id * */
public String getRingDownUrl(String rid){String url = String.format(GET_DOWN_URL, rid);
String responseStr = httpGet(url);return responseStr;}} 查看全部

  java抓取网页内容(
java多线程获取铃声的json数据()(图)
)
  java多线程抓取铃声官网的铃声数据
  更新时间:2016-04-28 11:50:47 作者:bobo_ll
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据。通过解析json数据可以看到有{"hasmore":1,"curpage":1}等指令,通过判断hasmore的值来决定是否取下一页。但是上面链接返回的json没有铃声的下载地址
  我一直想练习java多线程来获取数据。
  有一天我发现Ringtones()的官网有很多数据。
  通过观察它们的前端来获取铃声数据的ajax
  
  {类别 ID}&amp;page={分页符页码}
  不难发现,通过改变listId和page,可以从服务端获取铃声的json数据,通过解析json数据,
  可以看到有{"hasmore":1,"curpage":1}这样的指令。通过判断hasmore的值,决定是否爬取下一页。
  但是上面链接返回的json没有铃声的下载地址
  你很快就会发现,点击页面上的“下载”,你会看到
  通过以下请求,可以得到铃声的下载地址
  {铃声ID}
  
  因此,他们的数据很容易被窃取。于是我开始...
  源代码已发布在 github 上。如果您对童鞋感兴趣,可以查看
  github:
  以上代码:
  
package me.yongbo.DuoduoRingRobot;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
/* * @author yongbo_ * @created 2013/4/16 * * */
public class DuoduoRingRobotClient implements Runnable {
public static String GET_RINGINFO_URL = "http://www.shoujiduoduo.com/ri ... D%251$d&page=%2$d";
public static String GET_DOWN_URL = "http://www.shoujiduoduo.com/ri ... D%251$d";
public static String ERROR_MSG = "listId为 %1$d 的Robot发生错误,已自动停止。当前page为 %2$d";public static String STATUS_MSG = "开始抓取数据,当前listId: %1$d,当前page: %2$d";
public static String FILE_DIR = "E:/RingData/";public static String FILE_NAME = "listId=%1$d.txt";private boolean errorFlag = false;private int listId;private int page;
private int endPage = -1;private int hasMore = 1;
private DbHelper dbHelper;
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * @param endPage 结束页码 * */
public DuoduoRingRobotClient(int listId, int beginPage, int endPage)
{this.listId = listId;this.page = beginPage;this.endPage = endPage;this.dbHelper = new DbHelper();}
/** * 构造函数 * @param listId 菜单ID * @param page 开始页码 * */
public DuoduoRingRobotClient(int listId, int page) {this(listId, page, -1);}
/** * 获取铃声 * */public void getRings() {String url = String.format(GET_RINGINFO_URL, listId, page);String responseStr = httpGet(url);hasMore = getHasmore(responseStr);
page = getNextPage(responseStr);
ringParse(responseStr.replaceAll("\\{\"hasmore\":[0-9]*,\"curpage\":[0-9]*\\},", "").replaceAll(",]", "]"));}/** * 发起http请求 * @param webUrl 请求连接地址 * */public String httpGet(String webUrl){URL url;URLConnection conn;StringBuilder sb = new StringBuilder();String resultStr = "";try {url = new URL(webUrl);conn = url.openConnection();conn.connect();InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader bufReader = new BufferedReader(isr);String lineText;while ((lineText = bufReader.readLine()) != null) {sb.append(lineText);}resultStr = sb.toString();} catch (Exception e) {errorFlag = true;//将错误写入txtwriteToFile(String.format(ERROR_MSG, listId, page));}return resultStr;}/** * 将json字符串转化成Ring对象,并存入txt中 * @param json Json字符串 * */public void ringParse(String json) {Ring ring = null;JsonElement element = new JsonParser().parse(json);JsonArray array = element.getAsJsonArray();// 遍历数组Iterator it = array.iterator();
Gson gson = new Gson();while (it.hasNext() && !errorFlag) {JsonElement e = it.next();// JsonElement转换为JavaBean对象ring = gson.fromJson(e, Ring.class);ring.setDownUrl(getRingDownUrl(ring.getId()));if(isAvailableRing(ring)) {System.out.println(ring.toString());
//可选择写入数据库还是写入文本//writeToFile(ring.toString());writeToDatabase(ring);}}}
/** * 写入txt * @param data 字符串 * */public void writeToFile(String data)
{String path = FILE_DIR + String.format(FILE_NAME, listId);File dir = new File(FILE_DIR);File file = new File(path);FileWriter fw = null;if(!dir.exists()){dir.mkdirs();
}try {if(!file.exists()){file.createNewFile();}fw = new FileWriter(file, true);
fw.write(data);fw.write("\r\n");fw.flush();} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}finally {try {if(fw != null){fw.close();}} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();}}}/** * 写入数据库 * @param ring 一个Ring的实例 * */
public void writeToDatabase(Ring ring) {dbHelper.execute("addRing", ring);}
@Overridepublic void run() {while(hasMore == 1 && !errorFlag){if(endPage != -1){if(page > endPage) { break; }}System.out.println(String.format(STATUS_MSG, listId, page));
getRings();System.out.println(String.format("该页数据写入完成"));}System.out.println("ending...");}
private int getHasmore(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");
Matcher match = p.matcher(resultStr);
if (match.find()) { return Integer.parseInt(match.group(1));
} return 0;
}
private int getNextPage(String resultStr){Pattern p = Pattern.compile("\"hasmore\":([0-9]*),\"curpage\":([0-9]*)");Matcher match = p.matcher(resultStr);if (match.find()) {return Integer.parseInt(match.group(2));}return 0;}
/** * 判断当前Ring是否满足条件。当Ring的name大于50个字符或是duration为小数则不符合条件,将被剔除。 * @param ring 当前Ring对象实例 * */private boolean isAvailableRing(Ring ring){Pattern p = Pattern.compile("^[1-9][0-9]*$");
Matcher match = p.matcher(ring.getDuration());
if(!match.find()){return false;}if(ring.getName().length() > 50 || ring.getArtist().length() > 50 || ring.getDownUrl().length() == 0){return false;}return true;}
/** * 获取铃声的下载地址 * @param rid 铃声的id * */
public String getRingDownUrl(String rid){String url = String.format(GET_DOWN_URL, rid);
String responseStr = httpGet(url);return responseStr;}}

java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-02-02 04:02 • 来自相关话题

  java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))
  java抓取网页内容有web自带的burpweb扫描器。java抓取网页内容的有jsp自带的jsp扫描器。java抓取网页内容的有php的redissql注入。php抓取网页内容的有python的xss注入。java抓取网页内容的有perl的sql注入。网页内容的爬取是一项技术。而这些技术也存在于相应的编程语言之中。
  抓取网页内容的相关编程语言有多种:php,java,python,node.js,perl等等。利用这些编程语言,我们可以编写自己的爬虫程序,用来抓取网页内容。但是,是否编写一个爬虫程序就能自动抓取网页内容呢?这就让我们一起来探究一下:如何编写一个简单的爬虫程序?首先,回答一下,一个爬虫程序,能否抓取网页内容?答案是能的,因为网页内容被爬取时,首先会要经过处理的网页解析器来解析网页。
  每一个网页的url地址,以及返回的内容都会经过解析器的处理,然后给出对应的处理结果返回,这样爬虫程序就可以访问到指定的网页内容了。举个例子,某网站内容有:{item:{page:1,name:'favicon'}},name:'xxx',item:'link'}打开上述网页,我们就可以看到:{item:{page:1,name:'favicon'}},这段url地址下,存在{page:1,name:'favicon'}这样的网页,并且我们还能以此来展示link的内容。
  所以我们可以认为python,java,php等编程语言的程序就能够提取网页中的内容。但是,这样做有一些缺点,比如:(。
  1)爬取网页非常耗时,经常出现网页超时,卡住的情况,网页自身也会因为处理多个页面不利,或者重定向速度太慢,所以爬取时间一般不会短。
  2)爬取完成后,很难对网页内容进行修改。
  3)网页内容太多的时候,爬取网页速度会极慢。
  4)服务器容易崩溃,有的站点甚至直接崩溃。另外,爬取网页后的分析处理也是非常耗时的,浪费精力,因此抓取网页后会进行很长时间的分析以及处理。那么,爬取网页后,我们能如何对网页进行修改及改进呢?在学习一种新的语言时,可以通过对语言进行编译以及解释两步工作。那么,编译器与解释器如何对网页内容进行编译呢?解释器又如何解释及解释这个网页呢?解释器首先从文本文件解析出一些特征以后,会将这些特征以及对应的数据,转换成一些编译后的机器码(一般是一些运行时程序存储的一些数据)。
  通过一些对应的操作,将这些机器码转换成不同的二进制程序,然后编译后生成机器码,最后发送给网页服务器,服务器来解释编译后的机器码。这样我们才能通过解释器来抓取这些网页内容。生成机器码有两种方式:直接由文。 查看全部

  java抓取网页内容(java抓取网页内容有web自带的burpweb扫描器(一))
  java抓取网页内容有web自带的burpweb扫描器。java抓取网页内容的有jsp自带的jsp扫描器。java抓取网页内容的有php的redissql注入。php抓取网页内容的有python的xss注入。java抓取网页内容的有perl的sql注入。网页内容的爬取是一项技术。而这些技术也存在于相应的编程语言之中。
  抓取网页内容的相关编程语言有多种:php,java,python,node.js,perl等等。利用这些编程语言,我们可以编写自己的爬虫程序,用来抓取网页内容。但是,是否编写一个爬虫程序就能自动抓取网页内容呢?这就让我们一起来探究一下:如何编写一个简单的爬虫程序?首先,回答一下,一个爬虫程序,能否抓取网页内容?答案是能的,因为网页内容被爬取时,首先会要经过处理的网页解析器来解析网页。
  每一个网页的url地址,以及返回的内容都会经过解析器的处理,然后给出对应的处理结果返回,这样爬虫程序就可以访问到指定的网页内容了。举个例子,某网站内容有:{item:{page:1,name:'favicon'}},name:'xxx',item:'link'}打开上述网页,我们就可以看到:{item:{page:1,name:'favicon'}},这段url地址下,存在{page:1,name:'favicon'}这样的网页,并且我们还能以此来展示link的内容。
  所以我们可以认为python,java,php等编程语言的程序就能够提取网页中的内容。但是,这样做有一些缺点,比如:(。
  1)爬取网页非常耗时,经常出现网页超时,卡住的情况,网页自身也会因为处理多个页面不利,或者重定向速度太慢,所以爬取时间一般不会短。
  2)爬取完成后,很难对网页内容进行修改。
  3)网页内容太多的时候,爬取网页速度会极慢。
  4)服务器容易崩溃,有的站点甚至直接崩溃。另外,爬取网页后的分析处理也是非常耗时的,浪费精力,因此抓取网页后会进行很长时间的分析以及处理。那么,爬取网页后,我们能如何对网页进行修改及改进呢?在学习一种新的语言时,可以通过对语言进行编译以及解释两步工作。那么,编译器与解释器如何对网页内容进行编译呢?解释器又如何解释及解释这个网页呢?解释器首先从文本文件解析出一些特征以后,会将这些特征以及对应的数据,转换成一些编译后的机器码(一般是一些运行时程序存储的一些数据)。
  通过一些对应的操作,将这些机器码转换成不同的二进制程序,然后编译后生成机器码,最后发送给网页服务器,服务器来解释编译后的机器码。这样我们才能通过解释器来抓取这些网页内容。生成机器码有两种方式:直接由文。

java抓取网页内容(PS教程-PS制作远程服务器制作方法)

网站优化优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-01-29 16:12 • 来自相关话题

  java抓取网页内容(PS教程-PS制作远程服务器制作方法)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持面团圈教程! 查看全部

  java抓取网页内容(PS教程-PS制作远程服务器制作方法)
  我没什么事,刚学会部署git到远程服务器,也没什么事,就干脆做了一个爬网页信息的小工具。如果将其中的一些值设置为参数,扩展性能可能会更好!我希望这是一个好的开始,也让我在阅读字符串方面更加精通。值得注意的是,在JAVA1.8中使用String拼接字符串时,会自动读取你想要的字符串。拼接后的字符串由StringBulider进行处理,极大的优化了String的性能。废话不多说,展示我的XXX码~
  运行结果:
  
  先打开百度百科,搜索词条,比如“演员”,然后按F12查看源码
  然后抓取你想要的标签,注入到LinkedHashMap中,就ok了,很简单吧!看代码
  
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
* Created by chunmiao on 17-3-10.
*/
public class ReadBaiduSearch {
//储存返回结果
private LinkedHashMap mapOfBaike;
//获取搜索信息
public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {
mapOfBaike = getResult(infomationWords);
return mapOfBaike;
}
//通过网络链接获取信息
private static LinkedHashMap getResult(String keywords) throws IOException {
//搜索的url
String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
//搜索词条的节点
String startNode = "";
//词条的链接关键字
String keyOfHref = "href=\"";
//词条的标题关键字
String keyOfTitle = "target=\"_blank\">";
String endNode = "";
boolean isNode = false;
String title;
String href;
String rLine;
LinkedHashMap keyMap = new LinkedHashMap();
//开始网络请求
URL url = new URL(keyUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//读取网页内容
while ((rLine = bufferedReader.readLine()) != null){
//判断目标节点是否出现
if(rLine.contains(startNode)){
isNode = true;
}
//若目标节点出现,则开始抓取数据
if (isNode){
//若目标结束节点出现,则结束读取,节省读取时间
if (rLine.contains(endNode)) {
//关闭读取流
bufferedReader.close();
inputStreamReader.close();
break;
}
//若值为空则不读取
if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
keyMap.put(title,href);
}
}
}
return keyMap;
}
//获取词条对应的url
private static String getHref(String rLine,String keyOfHref){
String baikeUrl = "http://baike.baidu.com";
String result = "";
if(rLine.contains(keyOfHref)){
//获取url
for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
result += rLine.charAt(j);
}
//获取的url中可能不含baikeUrl,如果没有则在头部添加一个
if(!result.contains(baikeUrl)){
result = baikeUrl + result;
}
}
return result;
}
//获取词条对应的名称
private static String getName(String rLine,String keyOfTitle){
String result = "";
//获取标题内容
if(rLine.contains(keyOfTitle)){
result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
//将标题中的内容含有的标签去掉
result = result.replaceAll("||</a>|<a>","");
}
return result;
}
}
  以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一些帮助,也希望多多支持面团圈教程!

java抓取网页内容(java抓取网页内容大体分为如下4个步骤)

网站优化优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-01-29 08:01 • 来自相关话题

  java抓取网页内容(java抓取网页内容大体分为如下4个步骤)
  java抓取网页内容大体分为如下4个步骤:1.获取网页地址2.获取内容html文件3.解析html文件4.将获取到的html文件发送给浏览器浏览器读取这个html文件1.获取网页地址,可以利用我上面说的上一篇文章里面的代码,只要手机浏览器打开网址地址,就可以获取网页代码。我之前用浏览器的时候,用的百度(后来换了三个浏览器,用了好几种方法,才终于搞定)2.解析网页内容html文件,个人觉得这是最基础的一步,之前没有什么特别好的办法,就是把文本复制下来(网上有很多这种word插件),然后手动修改,在手机浏览器上查看,发现很多错误,就是找不到html文件。
  现在我用百度(后来换了三个浏览器,用了好几种方法,才终于搞定)今天尝试了一下,直接全文检索,大概是20分钟左右,就能找到文章所在位置,只不过找完了内容以后,发现它还有20个页码,估计我要重新翻阅一下,看看还有哪些页码的内容。不过chrome浏览器倒是可以,可以查看历史记录,然后返回的页码,就是刚才页面提示的,一共有10763个页码。
  只要使用chrome浏览器,就可以实现这个目的,使用谷歌浏览器的话,就需要有一定浏览器基础了。3.将获取到的html文件发送给浏览器浏览器解析我们发送的html文件的时候,需要一次性的解析出来,对于解析速度的影响,我这里用了一个java工具,xhr(),具体我们就不介绍了,反正就是xmlhttprequest这个东西,然后拿到相应的数据,加进数据库里面,还有数据库的建立,怎么建议大家入门,后续我会谈谈怎么建立。
  感兴趣的同学可以百度下xhr这个工具。4.把获取到的html文件发送给浏览器浏览器解析完,发现有错误提示,大概有10763个页码,估计我要重新翻阅一下,发现数据量不小,我也正在头疼这个问题,一边手机查看解析好的html文件,一边整理数据。手机那个是土豪性质的,每天都有新的页码(看这段代码的时候)然后我把这个问题提交给了问问题的小伙伴,需要她帮忙整理,一是文章都发过来了,这不丢人二是也可以培养我解决问题的能力。
  她提供了一个网址/,但是我没打开过,我也不知道行不行。ps:放一下网址,知乎排版要求,多图。yalongzyo/html-overview。 查看全部

  java抓取网页内容(java抓取网页内容大体分为如下4个步骤)
  java抓取网页内容大体分为如下4个步骤:1.获取网页地址2.获取内容html文件3.解析html文件4.将获取到的html文件发送给浏览器浏览器读取这个html文件1.获取网页地址,可以利用我上面说的上一篇文章里面的代码,只要手机浏览器打开网址地址,就可以获取网页代码。我之前用浏览器的时候,用的百度(后来换了三个浏览器,用了好几种方法,才终于搞定)2.解析网页内容html文件,个人觉得这是最基础的一步,之前没有什么特别好的办法,就是把文本复制下来(网上有很多这种word插件),然后手动修改,在手机浏览器上查看,发现很多错误,就是找不到html文件。
  现在我用百度(后来换了三个浏览器,用了好几种方法,才终于搞定)今天尝试了一下,直接全文检索,大概是20分钟左右,就能找到文章所在位置,只不过找完了内容以后,发现它还有20个页码,估计我要重新翻阅一下,看看还有哪些页码的内容。不过chrome浏览器倒是可以,可以查看历史记录,然后返回的页码,就是刚才页面提示的,一共有10763个页码。
  只要使用chrome浏览器,就可以实现这个目的,使用谷歌浏览器的话,就需要有一定浏览器基础了。3.将获取到的html文件发送给浏览器浏览器解析我们发送的html文件的时候,需要一次性的解析出来,对于解析速度的影响,我这里用了一个java工具,xhr(),具体我们就不介绍了,反正就是xmlhttprequest这个东西,然后拿到相应的数据,加进数据库里面,还有数据库的建立,怎么建议大家入门,后续我会谈谈怎么建立。
  感兴趣的同学可以百度下xhr这个工具。4.把获取到的html文件发送给浏览器浏览器解析完,发现有错误提示,大概有10763个页码,估计我要重新翻阅一下,发现数据量不小,我也正在头疼这个问题,一边手机查看解析好的html文件,一边整理数据。手机那个是土豪性质的,每天都有新的页码(看这段代码的时候)然后我把这个问题提交给了问问题的小伙伴,需要她帮忙整理,一是文章都发过来了,这不丢人二是也可以培养我解决问题的能力。
  她提供了一个网址/,但是我没打开过,我也不知道行不行。ps:放一下网址,知乎排版要求,多图。yalongzyo/html-overview。

java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-01-24 09:11 • 来自相关话题

  java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)
  为什么用Python开发爬虫更有优势?不能用Java开发?今天小编就为大家讲解一下!
  
  C/C++
  各种搜索引擎大多使用C/C++开发爬虫,可能是因为搜索引擎爬虫重要的是采集网站信息,对页面的解析要求不高。
  Python
  Python语言具有强大的网络功能,可以模拟登录和解析JavaScript。缺点是网页解析。Python 编写程序非常方便,特别是对于专注的爬虫。目标 网站 经常更改。使用Python根据目标的变化开发爬虫程序非常方便。
  爪哇
  Java有很多解析器,对网页的解析支持非常好。缺点是网络部分支持较差。
  对于一般需求,Java 或 Python 都可以完成这项工作。如果需要模拟登录,选择Python对抗反爬虫比较方便。如果需要处理复杂的网页,解析网页内容生成结构化数据,或者需要精细解析网页内容,可以选择Java。
  
  选择 Python 作为实现爬虫的语言的主要考虑因素是:
  (1) 爬取网页本身的界面
  与其他动态脚本语言(如Perl、Shell)相比,Python的urllib2包提供了更完善的访问web文档的API;与其他静态编程语言(如Java、C#、C++)相比,Python爬取网页文档。界面更简洁。
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这时候我们就需要模拟User Agent的行为来构造合适的请求,比如模拟用户登录,模拟Session/Cookie的存储和设置。Python 中有一些优秀的第三方包可以为你做这件事,例如 Requests 或 Mechanize。
  (2) 爬取后处理
  抓取的网页通常需要进行处理,例如过滤Html标签、提取文本等。Python的Beautiful Soup提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是Python可以做到最快最干净,就像那句“人生苦短,你需要Python”一样。
  (3) 开发效率高
  因为爬虫的具体代码要根据网站进行修改,而Python灵活的脚本语言特别适合这个任务。
  (4) 快速入门
  网上有很多Python教学资源,方便大家学习,有问题也很容易找到相关资料。此外,Python 对成熟的爬虫框架也有很强的支持,比如 Scrapy。 查看全部

  java抓取网页内容(为什么说用Python开发爬虫更有优势?Java开发不行吗?)
  为什么用Python开发爬虫更有优势?不能用Java开发?今天小编就为大家讲解一下!
  
  C/C++
  各种搜索引擎大多使用C/C++开发爬虫,可能是因为搜索引擎爬虫重要的是采集网站信息,对页面的解析要求不高。
  Python
  Python语言具有强大的网络功能,可以模拟登录和解析JavaScript。缺点是网页解析。Python 编写程序非常方便,特别是对于专注的爬虫。目标 网站 经常更改。使用Python根据目标的变化开发爬虫程序非常方便。
  爪哇
  Java有很多解析器,对网页的解析支持非常好。缺点是网络部分支持较差。
  对于一般需求,Java 或 Python 都可以完成这项工作。如果需要模拟登录,选择Python对抗反爬虫比较方便。如果需要处理复杂的网页,解析网页内容生成结构化数据,或者需要精细解析网页内容,可以选择Java。
  
  选择 Python 作为实现爬虫的语言的主要考虑因素是:
  (1) 爬取网页本身的界面
  与其他动态脚本语言(如Perl、Shell)相比,Python的urllib2包提供了更完善的访问web文档的API;与其他静态编程语言(如Java、C#、C++)相比,Python爬取网页文档。界面更简洁。
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这时候我们就需要模拟User Agent的行为来构造合适的请求,比如模拟用户登录,模拟Session/Cookie的存储和设置。Python 中有一些优秀的第三方包可以为你做这件事,例如 Requests 或 Mechanize。
  (2) 爬取后处理
  抓取的网页通常需要进行处理,例如过滤Html标签、提取文本等。Python的Beautiful Soup提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是Python可以做到最快最干净,就像那句“人生苦短,你需要Python”一样。
  (3) 开发效率高
  因为爬虫的具体代码要根据网站进行修改,而Python灵活的脚本语言特别适合这个任务。
  (4) 快速入门
  网上有很多Python教学资源,方便大家学习,有问题也很容易找到相关资料。此外,Python 对成熟的爬虫框架也有很强的支持,比如 Scrapy。

java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-01-23 00:13 • 来自相关话题

  java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)
  最近因为需要,对用java爬取网页信息有了一点了解!
  这一次,我的任务是捕捉原创上面学生的期末考试!因为这个网页是用写的,所以有些细节我不太了解!所以我只知道一件事!因为我毕竟不是asp。
  现在让我们来看看详细的步骤吧!
  
  基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookies了解不多,所以就去查资料了!
  主要内容大概就是Session是应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成一个唯一的 SessionID,并以 SessionID 作为标识访问服务器端的 Session 存储空间。SessionID 数据保存到客户端并与 cookie 一起保存。当用户提交页面时,会将SessionID提交给服务器以访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,Session也会失效。
  此 cookie 中会话的 sessionid 值。而这个值是在用户登录的时候产生的!所以我们要模拟登录并获取这个值!
  现在来解释一下模拟登录中遇到的问题!首先我们要自己登录,观察登录界面需要传入哪些值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的评论元素。
  
  在这里我们看到了我们想要的信息!
  前三个变量不是很懂,就去看了大黄(同学,也是景红。我的目标之一!)用PHP爬取原创的课表博客
  %E5%A6%82%E4%BD%95%E6%8A%93%E5%8E%9F%E5%88%9B%E6%95%99%E5%8A%A1%E7%B3%BB%E7 %BB%9F%E7%9A%84%E8%AF%BE%E8%A1%A8/
  其中有一个链接用于描述这些参数。链接在这里
  Cbo_LX是上一页选中的“学生”!
  Txt_UserName 和 Txt_Password 是您前台传递的用户名和密码!
  而 Img_DL.x 和 Img_DL.y 应该是点击按钮时的坐标!这不是很有用!
  现在问题又来了!. . 中国人在这里!那你会不会发现过去传过来的编解码有错误!. . 测试后是真的!直接传的话是不能传到对应页面的!
  为这个问题纠结了很久!然后开始尝试不同的编码格式来改变“学生”。. . 最终问题并没有解决,反而激起了我对编解码的强烈好奇!所以在未来的日子里,我们会更加关注这方面的!下次要花一个星期研究这个!因为我上次发博客说要直播!但是我太忙了,没时间做!终于要删除这条微博了!所以下次如果有时间,就一起完成这两个吧!
  最后,我请了一位同学帮忙解决了这个问题!原来这里是设置头文件!
  
  这里的 Content-Type 没问题!
  还需要注意的是,前面提到的参数__viewstate会发生变化。这意味着每次登录都是不同的!我不明白,所以我检查了它。
  就是说这个值会根据控件的状态而变化!所以不同的用户登录方式不同!所以我们要截取这个值!每次请求获取页面后,获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。
  最后但并非最不重要的是,一件非常烦人的事情!按照页面的步骤一步步模拟!最后发现中间有些页面根本不需要模拟!. . . 行!我是智障!但是奖励还是蛮大的!
  最后是拿到数据之后。转换下一个!因为我得到的是String数据,所以必须转成json格式!于是艰苦的工作又开始了!由于对json一窍不通,终于根据demo弄明白了!目前总结了json map添加的键值对,分别对应一个对象和一个对象名!如果map的值是一个数组,那么这对应json中的一个数组!如果使用bean方法,就相当于一个对象里面有很多属性!上级最后的请求就是这样的格式!. . . 可能是我的代码不是很好!所以当我使用前两种方法时!逻辑有点乱!
  代码先上传到百度云盘。有需要的朋友可以下去看看!
  好了,今天就写到这里吧!. .
  // 八卦
  报告材料。. 今天小白真的又变成了小白
<p>import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
public class TestString {

public static void main(String[] args){
Map map = new HashMap();
List list = new ArrayList();
String[] a = new String[3];
a[0]="0";
a[1]="1";
a[2]="2";
map.put("2", a);
for(int i=0;i 查看全部

  java抓取网页内容(Google浏览器模拟登陆所遇到的问题,你知道吗?)
  最近因为需要,对用java爬取网页信息有了一点了解!
  这一次,我的任务是捕捉原创上面学生的期末考试!因为这个网页是用写的,所以有些细节我不太了解!所以我只知道一件事!因为我毕竟不是asp。
  现在让我们来看看详细的步骤吧!
  
  基本上每个页面都会涉及到Cookie的值!而且这个值很奇怪!由于对asp的seesion和cookies了解不多,所以就去查资料了!
  主要内容大概就是Session是应用服务器维护的服务器端存储空间。当用户连接到服务器时,服务器会生成一个唯一的 SessionID,并以 SessionID 作为标识访问服务器端的 Session 存储空间。SessionID 数据保存到客户端并与 cookie 一起保存。当用户提交页面时,会将SessionID提交给服务器以访问Session数据。此过程不需要开发人员干预。所以一旦客户端禁用cookies,Session也会失效。
  此 cookie 中会话的 sessionid 值。而这个值是在用户登录的时候产生的!所以我们要模拟登录并获取这个值!
  现在来解释一下模拟登录中遇到的问题!首先我们要自己登录,观察登录界面需要传入哪些值!这里使用post来提交数据!所以我们登录后,打开谷歌浏览器的评论元素。
  
  在这里我们看到了我们想要的信息!
  前三个变量不是很懂,就去看了大黄(同学,也是景红。我的目标之一!)用PHP爬取原创的课表博客
  %E5%A6%82%E4%BD%95%E6%8A%93%E5%8E%9F%E5%88%9B%E6%95%99%E5%8A%A1%E7%B3%BB%E7 %BB%9F%E7%9A%84%E8%AF%BE%E8%A1%A8/
  其中有一个链接用于描述这些参数。链接在这里
  Cbo_LX是上一页选中的“学生”!
  Txt_UserName 和 Txt_Password 是您前台传递的用户名和密码!
  而 Img_DL.x 和 Img_DL.y 应该是点击按钮时的坐标!这不是很有用!
  现在问题又来了!. . 中国人在这里!那你会不会发现过去传过来的编解码有错误!. . 测试后是真的!直接传的话是不能传到对应页面的!
  为这个问题纠结了很久!然后开始尝试不同的编码格式来改变“学生”。. . 最终问题并没有解决,反而激起了我对编解码的强烈好奇!所以在未来的日子里,我们会更加关注这方面的!下次要花一个星期研究这个!因为我上次发博客说要直播!但是我太忙了,没时间做!终于要删除这条微博了!所以下次如果有时间,就一起完成这两个吧!
  最后,我请了一位同学帮忙解决了这个问题!原来这里是设置头文件!
  
  这里的 Content-Type 没问题!
  还需要注意的是,前面提到的参数__viewstate会发生变化。这意味着每次登录都是不同的!我不明白,所以我检查了它。
  就是说这个值会根据控件的状态而变化!所以不同的用户登录方式不同!所以我们要截取这个值!每次请求获取页面后,获取页面的隐藏值!然后将其作为参数传递给下一个请求页面。
  最后但并非最不重要的是,一件非常烦人的事情!按照页面的步骤一步步模拟!最后发现中间有些页面根本不需要模拟!. . . 行!我是智障!但是奖励还是蛮大的!
  最后是拿到数据之后。转换下一个!因为我得到的是String数据,所以必须转成json格式!于是艰苦的工作又开始了!由于对json一窍不通,终于根据demo弄明白了!目前总结了json map添加的键值对,分别对应一个对象和一个对象名!如果map的值是一个数组,那么这对应json中的一个数组!如果使用bean方法,就相当于一个对象里面有很多属性!上级最后的请求就是这样的格式!. . . 可能是我的代码不是很好!所以当我使用前两种方法时!逻辑有点乱!
  代码先上传到百度云盘。有需要的朋友可以下去看看!
  好了,今天就写到这里吧!. .
  // 八卦
  报告材料。. 今天小白真的又变成了小白
<p>import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
public class TestString {

public static void main(String[] args){
Map map = new HashMap();
List list = new ArrayList();
String[] a = new String[3];
a[0]="0";
a[1]="1";
a[2]="2";
map.put("2", a);
for(int i=0;i

java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-01-22 04:01 • 来自相关话题

  java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))
  前言
  曾几何时,动态页面的信息提取(ajax、内部js二次渲染等)一直是爬虫开发者的痛点。总之,真的没有合适的工具。尤其在Java中,像htmlunit这样的工具可以算是解析动态页面的神器,但是还不够完善,无法达到浏览器级别的解析效果,遇到稍微复杂一点的页面就不行了。在经历了种种痛苦和仇恨之后,笔者决定干脆开发一款专门为爬取、监控、测试这类场景设计的动态页面渲染处理服务器。要想达到浏览器级别的效果,就必须基于浏览器内核进行开发。好在我们有开源的webkit,好在我们有QtWebkit,对开发者更加友好。
  SeimiAgent 是基于 QtWebkit 开发的可以在服务器端后台运行的 webkit 服务。它可以通过 SeimiAgent 提供的 http 接口向 SeimiAgent 发送加载请求(要加载的 URL 和该页面接受的渲染时间或使用什么代理等),通过它加载和渲染你要处理的动态页面SeimiAgent,然后将渲染好的页面直接返回给调用者进行后续处理,所以运行的SeimiAgent服务是语言无关的,任何语言或框架都可以通过SeimiAgent提供的标准http接口获取服务。SeimiAgent 的加载和渲染环境都是常见的浏览器级别的,所以不用担心他处理动态页面的能力。目前 SeimiAgent 只支持返回渲染后的 HTML 文档。将来,
  使用演示
  
  SeimiCrawler 是一个敏捷、独立部署、分布式的Java爬虫框架,希望尽可能降低新手开发高可用性能好的爬虫系统的门槛,提高爬虫系统的开发效率。在 SeimiCrawler 的世界里,大部分人只关心编写爬虫的业务逻辑,剩下的交给 Seimi 来做。在设计思路上,SeimiCrawler 很大程度上受到了 Python 的爬虫框架 Scrapy 的启发,同时融合了 Java 语言本身的特点和 Spring 的特点,希望在国内使用更高效的 XPath 来更方便、更广泛地解析 HTML,所以SeimiCrawler默认的HTML解析解析器是JsoupXpath(一个独立的扩展项目,不收录在jsoup中)。默认情况下,
  使用集成和部署 SeimiAgent
  没有列出下载和解压。上面的动态图也有演示。下载地址可以在 SeimiAgent 主页上找到。进入SeimiAgent的bin目录,执行:
  ./SeimiAgent -p 8000
  这是启动 SeimiAgent 服务,监听 8000 端口。接下来,你可以通过任何语言的 http 请求实际发送加载页面的请求,并获取渲染结果。当然,我们这里要介绍的是 SeimiCrawler 是如何集成和使用 SeimiAgent 的。
  SeimiCrawler 配置
  SeimiCrawler 在 v0.3.0 版本中内置了对 SeimiAgent 的支持。开发者只需要配置 SeimiAgent 的地址和端口,然后在生成具体的 Request 时选择是否提交给 SeimiAgent,并指定如何提交。让我们直接在评论中解释最后一个完整的例子:
  package cn.wanghaomiao.crawlers;
import cn.wanghaomiao.seimi.annotation.Crawler;
import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
import cn.wanghaomiao.seimi.struct.Request;
import cn.wanghaomiao.seimi.struct.Response;
import cn.wanghaomiao.xpath.model.JXDocument;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* 这个例子演示如何使用SeimiAgent进行复杂动态页面信息抓取
* @author 汪浩淼 et.tw@163.com
* @since 2016/4/14.
*/
@Crawler(name = "seimiagent")
public class SeimiAgentDemo extends BaseSeimiCrawler{
/**
* 在resource/config/seimi.properties中配置方便更换,当然也可以自行根据情况使用自己的统一配置中心等服务。这里配置SeimiAgent服务所在地址。
*/
@Value("${seimiAgentHost}")
private String seimiAgentHost;
//SeimiAgent监听的端口好,如上文中的8000
@Value("${seimiAgentPort}")
private int seimiAgentPort;
@Override
public String startUrls {
return new String{"https://www.baidu.com"};
}
@Override
public String seiAgentHost {
return this.seimiAgentHost;
}
@Override
public int seimiAgentPort {
return this.seimiAgentPort;
}
@Override
public void start(Response response) {
Request seimiAgentReq = Request.build("https://www.souyidai.com","getTotalTransactions")
.useSeimiAgent
// 告诉SeimiAgent针对这个请求是否使用cookie,如果没有设置使用当前Crawler关于cookie使用条件作为默认值。
//.setSeimiAgentUseCookie(true)
// 设置全部load完成后给SeimiAgent多少时间用于执行js并渲染页面,单位为毫秒
.setSeimiAgentRenderTime(5000);
push(seimiAgentReq);
}
/**
* 获取搜易贷首页总成交额
* @param response
*/
public void getTotalTransactions(Response response){
JXDocument doc = response.document;
try {
String trans = StringUtils.join(doc.sel("//div[@class='homepage-amount']/div[@class='number font-arial']/div/span/text"),"");
logger.info("Final Res:{}",trans);
} catch (Exception e) {
e.printStackTrace;
}
}
}
  配置文件 seimi.properties
  启动
  public class Boot {
public static void main(String[] args){
Seimi s = new Seimi;
s.start("seimiagent");
}
}
  SeimiCrawler 上线后,可以看到想要的搜易贷交易总量。
  完整的Demo地址 查看全部

  java抓取网页内容(基于QtWebkit内核来开发的动态页面渲染处理服务器(图))
  前言
  曾几何时,动态页面的信息提取(ajax、内部js二次渲染等)一直是爬虫开发者的痛点。总之,真的没有合适的工具。尤其在Java中,像htmlunit这样的工具可以算是解析动态页面的神器,但是还不够完善,无法达到浏览器级别的解析效果,遇到稍微复杂一点的页面就不行了。在经历了种种痛苦和仇恨之后,笔者决定干脆开发一款专门为爬取、监控、测试这类场景设计的动态页面渲染处理服务器。要想达到浏览器级别的效果,就必须基于浏览器内核进行开发。好在我们有开源的webkit,好在我们有QtWebkit,对开发者更加友好。
  SeimiAgent 是基于 QtWebkit 开发的可以在服务器端后台运行的 webkit 服务。它可以通过 SeimiAgent 提供的 http 接口向 SeimiAgent 发送加载请求(要加载的 URL 和该页面接受的渲染时间或使用什么代理等),通过它加载和渲染你要处理的动态页面SeimiAgent,然后将渲染好的页面直接返回给调用者进行后续处理,所以运行的SeimiAgent服务是语言无关的,任何语言或框架都可以通过SeimiAgent提供的标准http接口获取服务。SeimiAgent 的加载和渲染环境都是常见的浏览器级别的,所以不用担心他处理动态页面的能力。目前 SeimiAgent 只支持返回渲染后的 HTML 文档。将来,
  使用演示
  
  SeimiCrawler 是一个敏捷、独立部署、分布式的Java爬虫框架,希望尽可能降低新手开发高可用性能好的爬虫系统的门槛,提高爬虫系统的开发效率。在 SeimiCrawler 的世界里,大部分人只关心编写爬虫的业务逻辑,剩下的交给 Seimi 来做。在设计思路上,SeimiCrawler 很大程度上受到了 Python 的爬虫框架 Scrapy 的启发,同时融合了 Java 语言本身的特点和 Spring 的特点,希望在国内使用更高效的 XPath 来更方便、更广泛地解析 HTML,所以SeimiCrawler默认的HTML解析解析器是JsoupXpath(一个独立的扩展项目,不收录在jsoup中)。默认情况下,
  使用集成和部署 SeimiAgent
  没有列出下载和解压。上面的动态图也有演示。下载地址可以在 SeimiAgent 主页上找到。进入SeimiAgent的bin目录,执行:
  ./SeimiAgent -p 8000
  这是启动 SeimiAgent 服务,监听 8000 端口。接下来,你可以通过任何语言的 http 请求实际发送加载页面的请求,并获取渲染结果。当然,我们这里要介绍的是 SeimiCrawler 是如何集成和使用 SeimiAgent 的。
  SeimiCrawler 配置
  SeimiCrawler 在 v0.3.0 版本中内置了对 SeimiAgent 的支持。开发者只需要配置 SeimiAgent 的地址和端口,然后在生成具体的 Request 时选择是否提交给 SeimiAgent,并指定如何提交。让我们直接在评论中解释最后一个完整的例子:
  package cn.wanghaomiao.crawlers;
import cn.wanghaomiao.seimi.annotation.Crawler;
import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
import cn.wanghaomiao.seimi.struct.Request;
import cn.wanghaomiao.seimi.struct.Response;
import cn.wanghaomiao.xpath.model.JXDocument;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* 这个例子演示如何使用SeimiAgent进行复杂动态页面信息抓取
* @author 汪浩淼 et.tw@163.com
* @since 2016/4/14.
*/
@Crawler(name = "seimiagent")
public class SeimiAgentDemo extends BaseSeimiCrawler{
/**
* 在resource/config/seimi.properties中配置方便更换,当然也可以自行根据情况使用自己的统一配置中心等服务。这里配置SeimiAgent服务所在地址。
*/
@Value("${seimiAgentHost}")
private String seimiAgentHost;
//SeimiAgent监听的端口好,如上文中的8000
@Value("${seimiAgentPort}")
private int seimiAgentPort;
@Override
public String startUrls {
return new String{"https://www.baidu.com"};
}
@Override
public String seiAgentHost {
return this.seimiAgentHost;
}
@Override
public int seimiAgentPort {
return this.seimiAgentPort;
}
@Override
public void start(Response response) {
Request seimiAgentReq = Request.build("https://www.souyidai.com","getTotalTransactions")
.useSeimiAgent
// 告诉SeimiAgent针对这个请求是否使用cookie,如果没有设置使用当前Crawler关于cookie使用条件作为默认值。
//.setSeimiAgentUseCookie(true)
// 设置全部load完成后给SeimiAgent多少时间用于执行js并渲染页面,单位为毫秒
.setSeimiAgentRenderTime(5000);
push(seimiAgentReq);
}
/**
* 获取搜易贷首页总成交额
* @param response
*/
public void getTotalTransactions(Response response){
JXDocument doc = response.document;
try {
String trans = StringUtils.join(doc.sel("//div[@class='homepage-amount']/div[@class='number font-arial']/div/span/text"),"");
logger.info("Final Res:{}",trans);
} catch (Exception e) {
e.printStackTrace;
}
}
}
  配置文件 seimi.properties
  启动
  public class Boot {
public static void main(String[] args){
Seimi s = new Seimi;
s.start("seimiagent");
}
}
  SeimiCrawler 上线后,可以看到想要的搜易贷交易总量。
  完整的Demo地址

java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)

网站优化优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-01-22 03:21 • 来自相关话题

  java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)
  说完一些基础知识,今天就和大家聊聊Python。
  什么是 Python?
  
  Python 是一种全栈开发语言。如果你能学好Python,你就可以把它做好,比如前端、后端、测试、大数据分析、爬虫。
  目前我不会详细介绍 Python 的流行程度。Python的作用是什么?
  Python有四个主要应用:
  网络爬虫
  网站发展
  人工智能
  自动化运维
  接下来,我们来谈谈这几个方面:
  一、网络爬虫
  第一,
  什么是网络爬虫?
  网络爬虫,又称网络蜘蛛,是指一种脚本程序,它按照一定的规则在网络上爬取想要的内容。众所周知,每个网页通常都收录其他网页的入口,网络爬虫通过一个URL依次进入其他网址,获取想要的内容。
  爬行动物有什么用?
  做垂直搜索引擎(google、baidu等)。
  科学研究:在线人类行为、在线社区进化、人类动力学研究、定量社会学、复杂网络、数据挖掘等实证研究领域需要大量数据,而网络爬虫是采集相关数据的有力工具。
  偷窥、黑客攻击、垃圾邮件……
  爬行是搜索引擎的第一步,也是最简单的一步。
  用什么语言编写爬虫?
  C、C++。高效、快速,适合一般搜索引擎爬取全网。缺点,开发慢,写起来又臭又长,例如:天网搜索源码。
  脚本语言:Perl、Python、Java、Ruby。简单易学,良好的文本处理可以方便网页内容的详细提取,但效率往往不高,适合少量网站的集中抓取
  C#?
  为什么 Python 现在最流行?
  
  就个人而言,我用 c# 和 java 编写了爬虫。差别不大,原则是用好正则表达式。只是平台问题。后来才知道很多爬虫都是用python写的,所以一发不可收拾。Python有很多优点,总结两个要点:
  1)抓取网页本身的接口
  相比其他静态编程语言,如java、c#、C++、python,爬取网页文档的界面更加简洁;与 perl、shell 等其他动态脚本语言相比,python 的 urllib2 包提供了对 web 文档更完整的访问。API。(当然红宝石也是不错的选择)
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这就是我们需要模拟用户代理的行为来构造适当的请求的地方,例如模拟用户登录,模拟会话/cookie存储和设置。python中有非常好的第三方包可以帮助你,比如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要进行处理,比如过滤html标签、提取文本等。Python的beautifulsoap提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是python可以做到最快最干净。人生苦短,你需要蟒蛇。
  二、网站发展
  开发网站需要用到哪些知识?
  1、Python基础,因为是用python开发的,所以指定python要知道,至少条件判断、循环、函数、类的知识你要知道;
  2、html和css的基础知识,因为要开发网站,网页都是用html和css写的,至少你得知道这些知识,即使你不会写前端,不能开发出特别漂亮的页面,网站,起码能看懂html标签是什么;
  3、数据库的基础知识,因为如果你开发一个网站,数据存在的地方,就在数据库中,那么你至少要知道如何对数据库进行增删改查,否则如何存储和检索数据?
  如果满足以上知识,开发一个简单的网站是没有问题的。如果要开发比较大的网站,业务逻辑比较复杂,还得用到其他的知识,比如redis、MQ等。
  三、人工智能
  人工智能(AI),简称AI。它是研究和开发用于模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的一门新技术科学。人工智能是计算机科学的一个分支,它试图理解智能的本质,并产生一种新的智能机器,它可以以类似于人类智能的方式做出反应。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能诞生以来,理论和技术日趋成熟,应用领域不断扩大。可以想象,未来人工智能带来的科技产品将是“容器”
  Python 正在成为机器学习的语言。大多数机器语言课程都是用 Python 编写的,大量大公司也使用 Python,这使许多人认为它是未来的主要编程语言。
  有人认为PYTHON效率低下,说不能支持多线程。嗯,这有点对,但是我想问一下,看这篇文章的人有多少做过搜索引擎开发?你们中有多少人正在开发具有数亿 PV 的并发 网站 开发?有多少人读过 LINUX 内核源代码?如果没有,请先学习介绍性语言。
  四、自动化运维
  Python可以满足大部分自动化运维的需求,也可以做后端C/S架构,可以使用WEB框架快速开发高级WEB界面。只有当你有能力做一个运维自动化系统的时候,你的价值才会显现出来。
  
  看完欢迎大家评论,记得关注我哦 查看全部

  java抓取网页内容(Python是什么呢?网络爬虫网站开发人工智能自动化运维接下来)
  说完一些基础知识,今天就和大家聊聊Python。
  什么是 Python?
  
  Python 是一种全栈开发语言。如果你能学好Python,你就可以把它做好,比如前端、后端、测试、大数据分析、爬虫。
  目前我不会详细介绍 Python 的流行程度。Python的作用是什么?
  Python有四个主要应用:
  网络爬虫
  网站发展
  人工智能
  自动化运维
  接下来,我们来谈谈这几个方面:
  一、网络爬虫
  第一,
  什么是网络爬虫?
  网络爬虫,又称网络蜘蛛,是指一种脚本程序,它按照一定的规则在网络上爬取想要的内容。众所周知,每个网页通常都收录其他网页的入口,网络爬虫通过一个URL依次进入其他网址,获取想要的内容。
  爬行动物有什么用?
  做垂直搜索引擎(google、baidu等)。
  科学研究:在线人类行为、在线社区进化、人类动力学研究、定量社会学、复杂网络、数据挖掘等实证研究领域需要大量数据,而网络爬虫是采集相关数据的有力工具。
  偷窥、黑客攻击、垃圾邮件……
  爬行是搜索引擎的第一步,也是最简单的一步。
  用什么语言编写爬虫?
  C、C++。高效、快速,适合一般搜索引擎爬取全网。缺点,开发慢,写起来又臭又长,例如:天网搜索源码。
  脚本语言:Perl、Python、Java、Ruby。简单易学,良好的文本处理可以方便网页内容的详细提取,但效率往往不高,适合少量网站的集中抓取
  C#?
  为什么 Python 现在最流行?
  
  就个人而言,我用 c# 和 java 编写了爬虫。差别不大,原则是用好正则表达式。只是平台问题。后来才知道很多爬虫都是用python写的,所以一发不可收拾。Python有很多优点,总结两个要点:
  1)抓取网页本身的接口
  相比其他静态编程语言,如java、c#、C++、python,爬取网页文档的界面更加简洁;与 perl、shell 等其他动态脚本语言相比,python 的 urllib2 包提供了对 web 文档更完整的访问。API。(当然红宝石也是不错的选择)
  另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这就是我们需要模拟用户代理的行为来构造适当的请求的地方,例如模拟用户登录,模拟会话/cookie存储和设置。python中有非常好的第三方包可以帮助你,比如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要进行处理,比如过滤html标签、提取文本等。Python的beautifulsoap提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
  其实很多语言和工具都可以做到以上功能,但是python可以做到最快最干净。人生苦短,你需要蟒蛇。
  二、网站发展
  开发网站需要用到哪些知识?
  1、Python基础,因为是用python开发的,所以指定python要知道,至少条件判断、循环、函数、类的知识你要知道;
  2、html和css的基础知识,因为要开发网站,网页都是用html和css写的,至少你得知道这些知识,即使你不会写前端,不能开发出特别漂亮的页面,网站,起码能看懂html标签是什么;
  3、数据库的基础知识,因为如果你开发一个网站,数据存在的地方,就在数据库中,那么你至少要知道如何对数据库进行增删改查,否则如何存储和检索数据?
  如果满足以上知识,开发一个简单的网站是没有问题的。如果要开发比较大的网站,业务逻辑比较复杂,还得用到其他的知识,比如redis、MQ等。
  三、人工智能
  人工智能(AI),简称AI。它是研究和开发用于模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的一门新技术科学。人工智能是计算机科学的一个分支,它试图理解智能的本质,并产生一种新的智能机器,它可以以类似于人类智能的方式做出反应。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能诞生以来,理论和技术日趋成熟,应用领域不断扩大。可以想象,未来人工智能带来的科技产品将是“容器”
  Python 正在成为机器学习的语言。大多数机器语言课程都是用 Python 编写的,大量大公司也使用 Python,这使许多人认为它是未来的主要编程语言。
  有人认为PYTHON效率低下,说不能支持多线程。嗯,这有点对,但是我想问一下,看这篇文章的人有多少做过搜索引擎开发?你们中有多少人正在开发具有数亿 PV 的并发 网站 开发?有多少人读过 LINUX 内核源代码?如果没有,请先学习介绍性语言。
  四、自动化运维
  Python可以满足大部分自动化运维的需求,也可以做后端C/S架构,可以使用WEB框架快速开发高级WEB界面。只有当你有能力做一个运维自动化系统的时候,你的价值才会显现出来。
  
  看完欢迎大家评论,记得关注我哦

java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-01-22 03:19 • 来自相关话题

  java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)
  , 等待
  属性,对应html中的属性,例如div元素中的class、id等
  2.常用 API
  首先介绍一下获取DOM元素的api,这些都属于Element类中定义的方法。
  getElementById(String id):通过id获取元素,非常准确。
  getElementsByTag(String tag):根据标签名获取元素的集合,例如:
  <p>document.getElementsByTag("p")</p>
  会得到所有
  标签的元素方便我们进一步从中抓取想要的文字。
  getElementsByClass(String className):根据类名获取元素的集合,例如:
  <p>document.getElementsByClass("item")</p>
  将获取类为 item 的所有元素。一般页面的列表项都会指定同一个类,所以这种方法方便我们直接获取指定的列表内容。
  getElementsByAttribute(String key):根据属性名获取元素的集合,如:
  <p>document.getElementsByAttribute("href")</p>
  这样我们就可以获取到所有带有链接属性的元素,方便跳转和爬取本页面涉及的其他页面。
  获取到DOM元素后,我们还需要获取元素的属性、文本等数据,如下:
  attr(String key):获取元素中某个属性的值。例如:element.attr("class"),可以获取当前元素的class属性值。
  attributes:获取元素的所有属性。我们可以遍历或以其他方式处理所有属性。
  id、className、classNames:获取元素的id值、类值,以及所有类值的集合。这些方法的最底层是attr(String key)方法,其实是一个方便我们使用的快速实现。
  text:获取元素的全文内容。我们不必手动遍历当前元素的所有子节点来获取文本信息,该方法会直接将所有文本拼接在一起并返回。
  例如
  好了,说了这么多,是时候来一场真正的战斗了。我们以爬虫入门的经典案例和豆瓣电影Top250页面为例,看看Jsoup是如何使用的。
  
  因为只是一个例子,所以我们的目标比较简单,就是爬取这个电影名字的页面。
  首先我们直接F12查看页面源码,我们会发现电影名是一个带有类title的标签,如图:
  
  虽然有多个电影名称,但其他名称将由 / 符号分隔。于是想法来了,只要我们在这个页面上获取所有class值为title的元素,并过滤掉带有/的文本,就可以了。代码显示如下:
  <p>public static void printMovieName throws IOException {
  // 豆瓣电影Top250
  String url = "https://movie.douban.com/top250";
  // 获取页面
  Document document = Jsoup.connect(url).get;
  // 根据class获取元素集合
  Elements titles = document.getElementsByClass("title");
  int index = 1;
  for (Element title : titles) {
  String text = title.text;
  // 过滤掉电影的其他名称
  if (!text.contains("/")) {
  System.out.println("No." + index + " " + text);
  index++;
  }
  }
  }</p>
  输出如下:
  
  总结
  怎么样,用Jsoup写爬虫是不是很简单?当然,基于这个简单的例子,我们可以实现更复杂的逻辑,比如:
  对于精通 Java 语言的程序员来说,这些逻辑很容易实现。这就是为什么,我认为Java程序员如果使用自己的语言来开发爬虫,效率会更高。因为日常的搬砖操作让我们可以更熟练的处理爬取的数据。爬虫只是获取数据的一种方式,也是数据处理和使用中非常重要的一环。
  提醒:我们必须合法使用爬行动物。通过网站域名+robots.txt查看爬虫协议,判断是否可以使用爬虫爬取信息,如:. 同时,切记不要爬取敏感信息,牟取暴利!
  好了,今天大叔的分享就到这里。公众号后台回复“爬虫”即可获取项目源码地址。看完文章,抓紧时间试一试吧。
  问你能有多少烦恼,开源项目解决万千烦恼,下期见! 查看全部

  java抓取网页内容(入门经典案例——一下获取DOM元素的入门案例分享)
  , 等待
  属性,对应html中的属性,例如div元素中的class、id等
  2.常用 API
  首先介绍一下获取DOM元素的api,这些都属于Element类中定义的方法。
  getElementById(String id):通过id获取元素,非常准确。
  getElementsByTag(String tag):根据标签名获取元素的集合,例如:
  <p>document.getElementsByTag("p")</p>
  会得到所有
  标签的元素方便我们进一步从中抓取想要的文字。
  getElementsByClass(String className):根据类名获取元素的集合,例如:
  <p>document.getElementsByClass("item")</p>
  将获取类为 item 的所有元素。一般页面的列表项都会指定同一个类,所以这种方法方便我们直接获取指定的列表内容。
  getElementsByAttribute(String key):根据属性名获取元素的集合,如:
  <p>document.getElementsByAttribute("href")</p>
  这样我们就可以获取到所有带有链接属性的元素,方便跳转和爬取本页面涉及的其他页面。
  获取到DOM元素后,我们还需要获取元素的属性、文本等数据,如下:
  attr(String key):获取元素中某个属性的值。例如:element.attr("class"),可以获取当前元素的class属性值。
  attributes:获取元素的所有属性。我们可以遍历或以其他方式处理所有属性。
  id、className、classNames:获取元素的id值、类值,以及所有类值的集合。这些方法的最底层是attr(String key)方法,其实是一个方便我们使用的快速实现。
  text:获取元素的全文内容。我们不必手动遍历当前元素的所有子节点来获取文本信息,该方法会直接将所有文本拼接在一起并返回。
  例如
  好了,说了这么多,是时候来一场真正的战斗了。我们以爬虫入门的经典案例和豆瓣电影Top250页面为例,看看Jsoup是如何使用的。
  
  因为只是一个例子,所以我们的目标比较简单,就是爬取这个电影名字的页面。
  首先我们直接F12查看页面源码,我们会发现电影名是一个带有类title的标签,如图:
  
  虽然有多个电影名称,但其他名称将由 / 符号分隔。于是想法来了,只要我们在这个页面上获取所有class值为title的元素,并过滤掉带有/的文本,就可以了。代码显示如下:
  <p>public static void printMovieName throws IOException {
  // 豆瓣电影Top250
  String url = "https://movie.douban.com/top250";
  // 获取页面
  Document document = Jsoup.connect(url).get;
  // 根据class获取元素集合
  Elements titles = document.getElementsByClass("title");
  int index = 1;
  for (Element title : titles) {
  String text = title.text;
  // 过滤掉电影的其他名称
  if (!text.contains("/")) {
  System.out.println("No." + index + " " + text);
  index++;
  }
  }
  }</p>
  输出如下:
  
  总结
  怎么样,用Jsoup写爬虫是不是很简单?当然,基于这个简单的例子,我们可以实现更复杂的逻辑,比如:
  对于精通 Java 语言的程序员来说,这些逻辑很容易实现。这就是为什么,我认为Java程序员如果使用自己的语言来开发爬虫,效率会更高。因为日常的搬砖操作让我们可以更熟练的处理爬取的数据。爬虫只是获取数据的一种方式,也是数据处理和使用中非常重要的一环。
  提醒:我们必须合法使用爬行动物。通过网站域名+robots.txt查看爬虫协议,判断是否可以使用爬虫爬取信息,如:. 同时,切记不要爬取敏感信息,牟取暴利!
  好了,今天大叔的分享就到这里。公众号后台回复“爬虫”即可获取项目源码地址。看完文章,抓紧时间试一试吧。
  问你能有多少烦恼,开源项目解决万千烦恼,下期见!

官方客服QQ群

微信人工客服

QQ人工客服


线