您的位置:

java循环爬取,python循环爬取页面

本文目录一览:

java爬虫抓取指定数据

根据java网络编程相关的内容,使用jdk提供的相关类可以得到url对应网页的html页面代码。

针对得到的html代码,通过使用正则表达式即可得到我们想要的内容。

比如,我们如果想得到一个网页上所有包括“java”关键字的文本内容,就可以逐行对网页代码进行正则表达式的匹配。最后达到去除html标签和不相关的内容,只得到包括“java”这个关键字的内容的效果。

从网页上爬取图片的流程和爬取内容的流程基本相同,但是爬取图片的步骤会多一步。

需要先用img标签的正则表达式匹配获取到img标签,再用src属性的正则表达式获取这个img标签中的src属性的图片url,然后再通过缓冲输入流对象读取到这个图片url的图片信息,配合文件输出流将读到的图片信息写入到本地即可。

Java网络爬虫怎么实现?

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。

以下是一个使用java实现的简单爬虫核心代码:

public void crawl() throws Throwable {

while (continueCrawling()) {

CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL

if (url != null) {

printCrawlInfo();

String content = getContent(url); //获取URL的文本信息

//聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理

if (isContentRelevant(content, this.regexpSearchPattern)) {

saveContent(url, content); //保存网页至本地

//获取网页内容中的链接,并放入待爬取队列中

Collection urlStrings = extractUrls(content, url);

addUrlsToUrlQueue(url, urlStrings);

} else {

System.out.println(url + " is not relevant ignoring ...");

}

//延时防止被对方屏蔽

Thread.sleep(this.delayBetweenUrls);

}

}

closeOutputStream();

}

private CrawlerUrl getNextUrl() throws Throwable {

CrawlerUrl nextUrl = null;

while ((nextUrl == null) (!urlQueue.isEmpty())) {

CrawlerUrl crawlerUrl = this.urlQueue.remove();

//doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robot.txt"中配置的规则进行爬取

//isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap

//isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免

if (doWeHavePermissionToVisit(crawlerUrl)

(!isUrlAlreadyVisited(crawlerUrl))

isDepthAcceptable(crawlerUrl)) {

nextUrl = crawlerUrl;

// System.out.println("Next url to be visited is " + nextUrl);

}

}

return nextUrl;

}

private String getContent(CrawlerUrl url) throws Throwable {

//HttpClient4.1的调用与之前的方式不同

HttpClient client = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(url.getUrlString());

StringBuffer strBuf = new StringBuffer();

HttpResponse response = client.execute(httpGet);

if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {

HttpEntity entity = response.getEntity();

if (entity != null) {

BufferedReader reader = new BufferedReader(

new InputStreamReader(entity.getContent(), "UTF-8"));

String line = null;

if (entity.getContentLength() 0) {

strBuf = new StringBuffer((int) entity.getContentLength());

while ((line = reader.readLine()) != null) {

strBuf.append(line);

}

}

}

if (entity != null) {

nsumeContent();

}

}

//将url标记为已访问

markUrlAsVisited(url);

return strBuf.toString();

}

public static boolean isContentRelevant(String content,

Pattern regexpPattern) {

boolean retValue = false;

if (content != null) {

//是否符合正则表达式的条件

Matcher m = regexpPattern.matcher(content.toLowerCase());

retValue = m.find();

}

return retValue;

}

public List extractUrls(String text, CrawlerUrl crawlerUrl) {

Map urlMap = new HashMap();

extractHttpUrls(urlMap, text);

extractRelativeUrls(urlMap, text, crawlerUrl);

return new ArrayList(urlMap.keySet());

}

private void extractHttpUrls(Map urlMap, String text) {

Matcher m = (text);

while (m.find()) {

String url = m.group();

String[] terms = url.split("a href=\"");

for (String term : terms) {

// System.out.println("Term = " + term);

if (term.startsWith("http")) {

int index = term.indexOf("\"");

if (index 0) {

term = term.substring(0, index);

}

urlMap.put(term, term);

System.out.println("Hyperlink: " + term);

}

}

}

}

private void extractRelativeUrls(Map urlMap, String text,

CrawlerUrl crawlerUrl) {

Matcher m = relativeRegexp.matcher(text);

URL textURL = crawlerUrl.getURL();

String host = textURL.getHost();

while (m.find()) {

String url = m.group();

String[] terms = url.split("a href=\"");

for (String term : terms) {

if (term.startsWith("/")) {

int index = term.indexOf("\"");

if (index 0) {

term = term.substring(0, index);

}

String s = //" + host + term;

urlMap.put(s, s);

System.out.println("Relative url: " + s);

}

}

}

}

public static void main(String[] args) {

try {

String url = "";

Queue urlQueue = new LinkedList();

String regexp = "java";

urlQueue.add(new CrawlerUrl(url, 0));

NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L,

regexp);

// boolean allowCrawl = crawler.areWeAllowedToVisit(url);

// System.out.println("Allowed to crawl: " + url + " " +

// allowCrawl);

crawler.crawl();

} catch (Throwable t) {

System.out.println(t.toString());

t.printStackTrace();

}

}

java怎么循环读取目录下的文件内容

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

1.不使用递归的方法调用。

public void traverseFolder1(String path) {

int fileNum = 0, folderNum = 0;

File file = new File(path);

if (file.exists()) {

LinkedListFile list = new LinkedListFile();

File[] files = file.listFiles();

for (File file2 : files) {

if (file2.isDirectory()) {

System.out.println("文件夹:" + file2.getAbsolutePath());

list.add(file2);

fileNum++;

} else {

System.out.println("文件:" + file2.getAbsolutePath());

folderNum++;

}

}

File temp_file;

while (!list.isEmpty()) {

temp_file = list.removeFirst();

files = temp_file.listFiles();

for (File file2 : files) {

if (file2.isDirectory()) {

System.out.println("文件夹:" + file2.getAbsolutePath());

list.add(file2);

fileNum++;

} else {

System.out.println("文件:" + file2.getAbsolutePath());

folderNum++;

}

}

}

} else {

System.out.println("文件不存在!");

}

System.out.println("文件夹共有:" + folderNum + ",文件共有:" + fileNum);

}

2.使用递归的方法调用

public static ListFile getFileList(String strPath) {

File dir = new File(strPath);

File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组

if (files != null) {

for (int i = 0; i files.length; i++) {

String fileName = files[i].getName();

if (files[i].isDirectory()) { // 判断是文件还是文件夹

getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径

} else if (fileName.endsWith("avi")) { // 判断文件名是否以.avi结尾

String strFileName = files[i].getAbsolutePath();

System.out.println("---" + strFileName);

filelist.add(files[i]);

} else {

continue;

}

}

}

return filelist;

}

java循环爬取,python循环爬取页面

2022-11-21
爬虫pythonjson(爬虫python和java)

本文目录一览: 1、Python爬虫笔记(二)requests模块get,post,代理 2、Python爬虫(七)数据处理方法之JSON 3、Python与爬虫有什么关系? Python爬虫笔记(二

2023-12-08
python爬虫二,python爬虫二级页面

2022-11-18
java实现网页爬虫的示例讲解(java爬虫爬取网页内容)

2022-11-14
python爬取糗百内容(爬取糗事百科)

2022-11-11
java并发小说爬虫,java爬取小说

2022-11-23
java爬虫(java爬虫和python爬虫)

2022-11-15
Python爬取网页数据的教程

2023-05-10
Python爬取网页数据的基本方法

2023-05-10
爬虫java,爬虫java框架

2023-01-09
java爬虫,java爬虫代码

2023-01-09
python爬虫环境与爬虫介绍(python爬虫开发环境)

2022-11-12
爬取网页数据详解

2023-05-17
js爬取网页内容(java爬虫爬取网页内容)

本文目录一览: 1、如果网页内容是由javascript生成的,应该怎么实现爬虫 2、怎么爬取网页的动态内容,很多都是js动态生成的内容o 3、怎么爬取网页的动态内容,很多都是js动态生 4、如何爬取

2023-12-08
python爬取网站数据步骤,Python爬取网站

2022-11-19
简单java爬虫,java爬虫程序

2022-11-20
php爬取文件(python 爬取网页文件)

2022-11-16
python爬虫爬取网上的照片(python爬取图片代码)

2022-11-13
python爬取微博博主的博文(爬虫抓取微博内容)

2022-11-11
java学习的一些基础笔记(java初学笔记)

2022-11-14