gpt4 book ai didi

java - jsoup java html解析

转载 作者:行者123 更新时间:2023-11-28 01:34:05 30 4
gpt4 key购买 nike

我是堆栈上的新法国用户,我遇到了问题 ^^

我使用 HTML 解析 Jsoup 来解析 html 页面。为此没关系,但我无法同时解析更多 url。

这是我的代码:

解析网页的第一类

package test2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public final class Utils {

public static Map<String, String> parse(String url){

Map<String, String> out = new HashMap<String, String>();

try
{
Document doc = Jsoup.connect(url).get();

doc.select("img").remove();

Elements denomination = doc.select(".AmmDenomination");
Elements composition = doc.select(".AmmComposition");
Elements corptexte = doc.select(".AmmCorpTexte");


for(int i = 0; i < denomination.size(); i++)
{
out.put("denomination" + i, denomination.get(i).text());
}

for(int i = 0; i < composition.size(); i++)
{
out.put("composition" + i, composition.get(i).text());
}

for(int i = 0; i < corptexte.size(); i++)
{
out.put("corptexte" + i, corptexte.get(i).text());
System.out.println(corptexte.get(i));
}

} catch(IOException e){
e.printStackTrace();
}
return out;
}//Fin Methode parse


public static void excelizer(int fileId, Map<String, String> values){

try
{
FileOutputStream out = new FileOutputStream("C:/Documents and Settings/c.bon/git/clinsearch/drugs/src/main/resources/META-INF/test/fichier2.xls" );
Workbook wb = new HSSFWorkbook();
Sheet mySheet = wb.createSheet();
Row row1 = mySheet.createRow(0);
Row row2 = mySheet.createRow(1);

String entete[] = {"CIS", "Denomination", "Composition", "Form pharma", "Indication therapeutiques", "Posologie", "Contre indication", "Mise en garde",
"Interraction", "Effet indesirable", "Surdosage", "Pharmacodinamie", "Liste excipients", "Incompatibilité", "Duree conservation",
"Conservation", "Emballage", "Utilisation Manipulation", "TitulaireAMM"};

for (int i = 0; i < entete.length; i++)
{
row1.createCell(i).setCellValue(entete[i]);
}


Set<String> set = values.keySet();
int rowIndexDenom = 1;
int rowIndexCompo = 1;

for(String key : set)
{
if(key.contains("denomination"))
{
mySheet.createRow(1).createCell(1).setCellValue(values.get(key));
rowIndexDenom++;
}
else if(key.contains("composition"))
{
row2.createCell(2).setCellValue(values.get(key));
rowIndexDenom++;
}
}
wb.write(out);
out.close();
}
catch(Exception e)
{
e.printStackTrace();
}

}
}

二等舱

package test2;

public final class Task extends Thread {

private static int fileId = 0;
private int id;
private String url;


public Task(String url)
{
this.url = url;
id = fileId;
fileId++;
}

@Override
public void run()
{
Utils.excelizer(id, Utils.parse(url));
}
}

主类(入口点)

package test2;
import java.util.ArrayList;

public class Main {

public static void main(String[] args)
{
ArrayList<String> urls = new ArrayList<String>();
urls.add("http://base-donnees-publique.medicaments.gouv.fr/affichageDoc.php?specid=61266250&typedoc=R");
urls.add("http://base-donnees-publique.medicaments.gouv.fr/affichageDoc.php?specid=66207341&typedoc=R");

for(String url : urls)
{
new Task(url).run();
}

}

}

当数据被复制到我的 excel 文件时,第二个 url 不起作用。

你能帮我解决我的问题吗?

谢谢

最佳答案

我认为这是因为你的 main() 在你的第二个线程有机会完成它的工作之前就退出了。您应该使用 Thread.join() 等待所有生成的线程完成。或者更好的是,创建一个 ExecutorService 并使用 awaitTermination(...) 进行阻塞,直到所有 URL 都被解析。
编辑 在这里查看一些例子http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html

关于java - jsoup java html解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29168580/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com