导航:首页 > 编程语言 > 爬虫java

爬虫java

发布时间:2022-01-24 18:37:33

java适合做爬虫吗

JAVA也可以实现爬虫,比如jsoup包,一个非常方便解析html的工具呢。
不过相对来说,java语言笨重,稍微有些麻烦。

Ⅱ java 网络爬虫怎么实现

以爬取豆瓣《红海行动》的所有评论为例,目标是爬取所有评论以及发表评论的用户名。

getHtml()类,首先是URL url1=new URL(url);模拟在网页输入网址,接着 URLConnection uc=url1.openConnection();模拟敲回车键打开该网址页面,后面的看注释应该能看懂了。bf.readLine()是依次每行读取页面的源码

/**
* 下载HTML页面源码
* @author yangjianxin
* @return string @author yangjianxin
* @time 2018-03-09
*/

public static String getHtml(String url,String encoding) {
StringBuffer sb=new StringBuffer();
BufferedReader bf = null;
InputStreamReader isr = null;
try {
//创建网络连接
URL url1=new URL(url);
//打开网络
URLConnection uc=url1.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//建立文件输入流
isr=new InputStreamReader(uc.getInputStream(),encoding);
//高效率读取
bf=new BufferedReader(isr);
//下载页面源码

String temp=null;
while((temp=bf.readLine())!=null) {
sb.append(temp+"\n");
}
//System.out.println(sb.toString());

} catch (MalformedURLException e) {
System.out.println("网页打开失败,请重新输入网址。");
e.printStackTrace();
}catch (IOException e) {
System.out.println("网页打开失败,请检查网络。");
e.printStackTrace();
}finally {
if(bf!=null) {try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(isr!=null) {
try {
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return sb.toString();

}

getGoalDate()类,Document document=Jsoup.parse(html),运用Jsoup.parse()解析网页源码,接着就是开始确定自己需要爬取的东西在网页里的位置,这需要我们对html有点了解,能看、读懂网页标签,可以看出当前页面的所有评论都在id为"content"的大盒子里,每条评论都在class名为"main review-item"的小盒子里, for(Element el:elments)是指对象el在当前页面循环去小盒子"main review-item"查找我们要爬取的东西,也就是用户名和评论, String name=el.getElementsByClass("name").text()中的“name”可以在当前盒子里查找到用户名,用.text()将它赋予给变量name,同理评论也是这样抓取,如果不用将它存入磁盘,则可以后面那段文件操作删除,只打印就行

Ⅲ java 爬虫怎么做

python">代码如下:

packagewebspider;
import
java.util.HashSet;
importjava.util.PriorityQueue;
import
java.util.Set;
importjava.util.Queue;

publicclassLinkQueue{
//已访问的url集合
privatestaticSetvisitedUrl
=newHashSet();
//待访问的url集合
=new
PriorityQueue();
//获得URL队列
(){
return
unVisitedUrl;
}
//添加到访问过的URL队列中
publicstaticvoidaddVisitedUrl(Stringurl)
{
visitedUrl.add(url);
}
//移除访问过的URL
(Stringurl)
{
visitedUrl.remove(url);
}
//未访问的URL出队列
(){
return
unVisitedUrl.poll();
}
//保证每个url只被访问一次
(Stringurl)
{
if(url!=null&&!url.trim().equals("")&&
!visitedUrl.contains(url)
&&
!unVisitedUrl.contains(url))
unVisitedUrl.add(url);
}
//获得已经访问的URL数目
(){
return
visitedUrl.size();
}
//判断未访问的URL队列中是否为空
()
{
returnunVisitedUrl.isEmpty();
}
}

配合极光HTTP使用更佳喔

Ⅳ java可以写爬虫吗

codeblocks能不能写我不知道,但不仅仅只有java可以写爬虫,还有像python等的语言也可以写

Ⅳ java爬虫代理如何实现

爬虫离不开的就是代理服务器了,如果我们不用http来爬虫,ip不更改的情况下,是很难进行的。当我们在使用爬虫爬取网站资料,速度快,可以不知疲倦地连续工作。但是由于爬虫软件在访问网站时,行为过于频繁,远超人力操作速度,就很容易被网站察觉,而封掉用户的IP。
所以,使用爬虫软件时,为了防止IP被封,或者IP已经被封,还想用自己的IP访问封了自己IP的网站时,就要用到代理IP了。http能够对我们的ip地址进行更改,这一操作能够有效减少了网站的ip限制的影响,对爬虫是很有帮助的。Ipidea含有240+国家地区的ip,真实住宅网络高度匿名强力保护本地信息。

Ⅵ java简单爬虫

你都已经有源代码了,重构一下代码,换一下包名不就可以了。

Ⅶ java网络爬虫

源代码如下
package com.cellstrain.icell.util;

import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* java实现爬虫
*/
public class Robot {
public static void main(String[] args) {
URL url = null;
URLConnection urlconn = null;
BufferedReader br = null;
PrintWriter pw = null;
// String regex = "http://[\\w+\\.?/?]+\\.[A-Za-z]+";
String regex = "https://[\\w+\\.?/?]+\\.[A-Za-z]+";//url匹配规则
Pattern p = Pattern.compile(regex);
try {
url = new URL("网址");//爬取的网址、这里爬取的是一个生物网站
urlconn = url.openConnection();
pw = new PrintWriter(new FileWriter("D:/SiteURL.txt"), true);//将爬取到的链接放到D盘的SiteURL文件中
br = new BufferedReader(new InputStreamReader(
urlconn.getInputStream()));
String buf = null;
while ((buf = br.readLine()) != null) {
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
pw.println(buf_m.group());
}
}
System.out.println("爬取成功^_^");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
}
}

Ⅷ 如何用Java写一个爬虫

我主要使用Jsoup解析,获取源码有时候使用Jsoup,比较复杂的时候比如需要换ip,改编码或者模拟登陆的时候使用HttpClient,以下是抓取开源中国新闻的一段代码,可以运行。
package demo;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* 使用JSoup 解析网页,语法使用 JS,css,Jquery 选择器语法,方便易懂
*
* Jsoup教程网:jsoup开发指南,jsoup中文使用手册,jsoup中文文档
*
* @author geekfly
*
*/
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String url = "新闻资讯 - 开源中国社区";
Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0").get();
Elements elements = document.select("#RecentNewsList .List > li");
for (Element element : elements) {
Elements titleElement = element.select("h2 a");
String title = titleElement.text();
String link = titleElement.attr("href").trim();
Elements dataElement = element.select(".date");
Elements autherElement = dataElement.select("a");
String auther = autherElement.text();
autherElement.remove();
String date = dataElement.text();
String detail = element.select(".detail").text();
System.out.println("链接: " + link);
System.out.println("标题: " + title);
System.out.println("作者: " + auther);
System.out.println("发布时间: " + date);
System.out.println("详细信息: " + detail);
System.out.println();
System.out.println();
}
System.out.println(elements.size());
}
}

Ⅸ 写爬虫和用Java写爬虫的区别是什么

没得区别的,用Java写爬虫代码
public class DownMM {
public static void main(String[] args) throws Exception {
//out为输出的路径,注意要以\\结尾
String out = "D:\\JSP\\pic\\java\\";
try{
File f = new File(out);
if(! f.exists()) {
f.mkdirs();
}
}catch(Exception e){
System.out.println("no");
}

String url = "http://www.mzitu.com/share/comment-page-";
Pattern reg = Pattern.compile("<img src=\"(.*?)\"");
for(int j=0, i=1; i<=10; i++){
URL uu = new URL(url+i);
URLConnection conn = uu.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
Scanner sc = new Scanner(conn.getInputStream());
Matcher m = reg.matcher(sc.useDelimiter("\\A").next());
while(m.find()){
Files.(new URL(m.group(1)).openStream(), Paths.get(out + UUID.randomUUID() + ".jpg"));
System.out.println("已下载:"+j++);
}
}
}
}

Ⅹ java 实现网络爬虫用哪个爬虫框架比较好

有些人问,开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:

上面说的爬虫,基本可以分3类:

1.分布式爬虫:Nutch

2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector

3. 非JAVA单机爬虫:scrapy

第一类:分布式爬虫

爬虫使用分布式,主要是解决两个问题:

1)海量URL管理

2)网速

现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:

1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。

2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。

3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。

4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。

5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。

6)Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x上写的是可以支持到hbase 0.94。但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。

所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。

如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个非常不稳定的版本。

阅读全文

与爬虫java相关的资料

热点内容
哪个app充值可以用银联二维码 浏览:563
女程序员和孩子玩 浏览:837
程序员苏州武汉 浏览:754
大脚插件如何切换安卓 浏览:941
python课设制作年历 浏览:405
明文在pdf 浏览:750
郑永令pdf 浏览:122
cad命令行坐标输入 浏览:781
编译原理csdn博客 浏览:194
想在深圳买房关注哪个app 浏览:913
国际体验服为什么服务器加载失败 浏览:690
php接口用处 浏览:394
想推广app去哪里找 浏览:258
phpcmysql 浏览:123
安卓手机的百度carlife怎么连接车 浏览:138
编译安装py 浏览:162
pythonchar转int 浏览:220
基于单片机的多组密码锁设计论文 浏览:108
华为云如何升级云服务器 浏览:213
生活垃圾压缩直运站 浏览:751